PHP ::: Speed ​​Test ::: $ _SESSION vs. $ variable

У меня есть форма с довольно большим количеством входных данных, которые также будут иметь высокий трафик. Я объявляю $ _SESSION vars таким образом, чтобы при проверке завершались данные, которые передаются, не должны быть переписаны пользователю из состояния конфиденциальности.

После того, как я подтвержу свой ввод формы следующим образом:

$hey = htmlspecialchars($_POST['hey']); if( correct_value($hey) == TRUE ) { $_SESSION['hey'] = $hey; } 

Теперь у меня есть две переменные с одинаковым значением в том же методе, где я обновляю db и т. Д.

Мой вопрос, быстрее ли с этого момента в рамках метода работать с:

 $hey; //regular variable 

Или:

 $_SESSION['hey']; //session variable 

Есть ли разница в производительности? В больших объемах он работает быстрее, чем другой?

Solutions Collecting From Web of "PHP ::: Speed ​​Test ::: $ _SESSION vs. $ variable"

Я не делал никаких тестов по этому поводу, но я сильно подозреваю, что $ _SESSION [] всегда будет немного медленнее, чем обычные переменные для записи, потому что он поддерживается файловой системой или базой данных. Даже если все хранилище $ _SESSION [] кэшировано, все равно будет задействовано больше активности процессора и памяти, чем при использовании переменных, которые хранятся только локально. Для чтений все еще будет небольшая разница, но она будет незначительной по сравнению с другими факторами.

Таким образом, комментарий выше правильно на деньги. У вас есть другие области оптимизации, которые важнее, чем эта.

Если вы хотите повысить производительность, подумайте о том, чтобы дублировать некоторые из ваших проверок ввода в JavaScript. (НЕ ЗАМЕНИТЕ подтверждение на стороне сервера, поскольку JS не является универсальным, просто подумайте о том, как избежать его, если это возможно).

Я собираюсь сделать второй комментарий здесь, если вы собираетесь оптимизировать, вы не получите большого улучшения, исключив повторяющиеся переменные (хотя, если у вас есть огромные переменные, вы хотите устранить дублирование, чтобы сохранить память, а не скорость). Однако, для демонстрации, я установил этот тест для тестирования:

 session_start(); $hey = "THIS IS A TEST OF ACCESS SPEEDS"; //our variable $_SESSION['hey'] = $hey; //out session variable $hey_array = array('a'=>'random','b'=>'random','c'=>'random'); //another random array $hey_array['hey'] = $hey; function access_the_variable($var){ $waste_some_time = substr($var,0,10); //this could be anything } //GO! $start = microtime(true); for($i=0;$i<100000;$i++){ access_the_variable($hey); } $end = microtime(true); echo "\$hey took ".($end-$start)." microseconds<br />"; $start = microtime(true); for($i=0;$i<100000;$i++){ access_the_variable($_SESSION['hey']); } $end = microtime(true); echo "\$_SESSION['hey'] took ".($end-$start)." microseconds<br />"; $start = microtime(true); for($i=0;$i<100000;$i++){ access_the_variable($hey_array['hey']); } $end = microtime(true); echo "\$hey_array['hey'] took ".($end-$start)." microseconds<br /><br />"; 

Результаты нескольких прогонов:

$ hey взял 0.079180002212524 микросекунды $ _SESSION ['hey'] взял 0.096824884414673 микросекунды $ hey_array ['hey'] взял 0.091028928756714 микросекунды

$ hey взял 0.080883026123047 микросекунды $ _SESSION ['hey'] взял 0.095050096511841 микросекунды $ hey_array ['hey'] взял 0.091977834701538 микросекунд

$ hey взял 0.081928968429565 микросекунды $ _SESSION ['hey'] взял 0.097215890884399 микросекунды $ hey_array ['hey'] взял 0.092087030410767 микросекунд

$ hey взял 0.081655979156494 микросекунды $ _SESSION ['hey'] взял 0.098057985305786 микросекунды $ hey_array ['hey'] взял 0.09247899055481 микросекунды

$ hey взял 0.081120014190674 микросекунды $ _SESSION ['hey'] взял 0.096808910369873 микросекунды $ hey_array ['hey'] взял 0.092255115509033 микросекунды

$ hey взял 0.081827878952026 микросекунды $ _SESSION ['hey'] взял 0.096134901046753 микросекунды $ hey_array ['hey'] взял 0.092247009277344 микросекунды

$ hey взял 0.081613063812256 микросекунды $ _SESSION ['hey'] взял 0.096814870834351 микросекунды $ hey_array ['hey'] взял 0.090691804885864 микросекунды

Итак, в 100 000 циклов мы говорим о .01 МИКРОСЕКОНДЫ.

Однако стоит отметить, что разность скоростей почти полностью связана с необходимостью доступа к ассоциативному массиву. Тот факт, что это суперглобал, не влияет на это (длина массива, однако, и вы начнете видеть крошечные разницы в скорости, если ваш массив SESSION станет огромным (но опять же, мы говорим о hundreths в миллионных доли секунды).

Существует незначительная разница в производительности. Когда я говорю «маргинальный», я имею в виду действительно, очень маленький . Тот факт, что это массив $_SESSION , не имеет производительности. Это поиск ассоциативного массива, который занимает немного больше времени, чем доступ к переменной.