PHP ::: Тест скорости ::: $ _SESSION против переменной $ - PullRequest
2 голосов
/ 27 января 2012

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

После того, как я проверил ввод моей формы, как это:теперь у меня есть две переменные с одним и тем же значением в одном и том же методе, где я обновляю базу данных и т. д.

Мой вопрос, быстрее ли с тех пор внутри метода работать с:* Или:

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

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

Ответы [ 3 ]

4 голосов
/ 27 января 2012

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

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 микросекунды $ 0,015 hey * hey * 8 098 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * не очень много;1010 * $ hey потребовалось 0,081928968429565 микросекунд $ _SESSION ['hey'] заняло 0,097215890884399 микросекунд $ hey_array ['hey'] заняло 0,092087030410767 микросекунд

$ hey взяло 0,0816559791580 $ 58985805805 из-за $ 58985805805805 $ 58985805805 $ 58985805805 $ 705 млн долларов США['эй'] заняло 0,09247899055481 микросекунды

$ хей заняло 0,081120014190674 микросекунды$ _SESSION ['эй'] тожеk 0,096134901046753 микросекунды $ hey_array ['hey'] заняло 0,092247009277344 микросекунды

$ hey взяло 0,081613063812256 микросекунды $ _SESSION ['hey'] взяло 0,096814870834351 1018,80 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 'он не стоил! ”, стоило ему стоить».

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

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

2 голосов
/ 27 января 2012

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

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

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

1 голос
/ 27 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...