Вызов session_start (); может нанести ущерб производительности вашего приложения.
Следующий код вызовет E_NOTICE, но не сильно повредит производительности
<?php
session_start();
session_start();
?>
Но звонки по следующим номерам повредят производительность!
Но это все еще полезно. Если у вас есть скрипт, который запускается за 3 минуты и вызывается с помощью XHR (js).
В этом случае полезно использовать session_write_close. в противном случае запрос к серверу блокируется до тех пор, пока сеансы не будут освобождены. Может случиться так, что вы захотите использовать сеансы в начале и в конце сценария.
<?php
session_start();
session_write_close();
session_start();
?>
Но, когда вы вызываете session_start (); вся информация десериализуется, и когда вы вызываете session_write_closed (), она сериализуется.
Так что если у вас много данных, это может быть очень медленно!
Следующий тест показывает, какое влияние он оказывает.
1.0130980014801 sesion_start + закрыть с пустым сеансом
1.0028710365295 нормальный цикл без сеанса
12.808688879013 много данных в сеансе со стартом + закрытием
1.0081849098206 снова нормальный цикл (бесполезно, вроде)
<?php
//start and clear first session
session_start();
session_destroy();
session_write_close();
//test one
if(true) {
//test loop one
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
session_start();
usleep(100);
session_write_close();
}
$end = microtime(true);
echo($end - $start);
//test loop 2
echo('<br />');
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
usleep(100);
}
$end = microtime(true);
echo($end - $start);
}
//fill the array with information so serialization is needed
session_start();
$_SESSION['test'] = array();
for($i = 0; $i < 10000; $i++) {
$_SESSION['test'][$i] = chr($i);
}
session_write_close();
echo('<br />');
//test two
if(true) {
//test loop one
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
session_start();
usleep(100);
session_write_close();
}
$end = microtime(true);
echo($end - $start);
//test loop 2
echo('<br />');
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
usleep(100);
}
$end = microtime(true);
echo($end - $start);
}
?>