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

时间:2012-01-27 03:52:10

标签: php session

我的表单输入量相当大,流量也很高。 我声明了$ _SESSION变量,以便在验证失败时,必须重新编写通过的数据,而不是为了方便用户重写。

在我验证表单输入之后:

$hey = htmlspecialchars($_POST['hey']);

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

我现在在更新数据库等的同一方法中有两个具有相同值的变量。

我的问题是,从那时起,使用a:

的方法会更快
$hey; //regular variable

或者a:

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

性能有差异吗?在高音量下,一个人的表现比另一个人快吗?

3 个答案:

答案 0 :(得分:4)

我要在这里发表评论,如果你要优化你不会通过消除重复变量得到很多改进(尽管如果你有巨大的变量你想要消除重复以保留内存 - 不是速度)。但是,为了演示,我设置了这个基准测试:

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 ['嘿']花了   0.096824884414673微秒$ hey_array ['hey']花了0.091028928756714微秒

     

$嘿拿了0.080883026123047微秒$ _SESSION ['嘿']拿了   0.095050096511841微秒$ hey_array ['hey']花了0.091977834701538微秒

     

$ hey花了0.081928968429565微秒$ _SESSION ['嘿']花了   0.097215890884399微秒$ hey_array ['hey']花了0.092087030410767微秒

     

$ hey花了0.081655979156494微秒$ _SESSION ['嘿']花了   0.098057985305786微秒$ hey_array ['hey']花了0.09247899055481微秒

     

$ hey花了0.081120014190674微秒$ _SESSION ['嘿']花了   0.096808910369873微秒$ hey_array ['hey']花了0.092255115509033微秒

     

$ hey花了0.081827878952026微秒$ _SESSION ['嘿']花了   0.096134901046753微秒$ hey_array ['hey']花了0.092247009277344微秒

     

$嘿拿了0.081613063812256微秒$ _SESSION ['嘿']拿了   0.096814870834351微秒$ hey_array ['hey']花了0.090691804885864微秒

所以,在100,000个循环中,我们谈论的是.01 MICROSECONDS。

然而,值得注意的是,速度差异几乎完全归因于需要访问关联数组。事实上它是一个超级全局并不会影响它(然而,如果你的SESSION阵列变得庞大,你将开始看到微小的速度差异(但是,我们再谈论百万分之几秒)。

答案 1 :(得分:2)

我没有对此做过任何基准测试,但我强烈怀疑$ _SESSION [] 总是比写入的正常变量慢一点,因为它受文件系统或数据库的支持。即使缓存了所有$ _SESSION []存储,使用它时仍然会涉及比使用仅保存在本地的变量更多的CPU和内存活动。对于读取,仍然可能存在小的差异,但与其他因素相比,它可以忽略不计。

所以上面的评论对钱是正确的。您还有其他优化领域比这个更重要。

如果您希望提高性能,请考虑在JavaScript中复制一些输入验证。 (不要REPLACE服务器端验证,因为JS不是通用的;只要考虑如果可能的话避免要求它的方法。)

答案 2 :(得分:1)

性能差异很小。当我说边缘时,我的意思是真的,非常小。它是$_SESSION数组的事实没有任何轴承性能。这是关联数组查找,需要比访问变量稍长的时间。