PHP ::: 速度测试 ::: $_SESSION vs. $variable

Dan*_*nze 2 php session

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

在我像这样验证我的表单输入之后:

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

if( correct_value($hey) == TRUE ) {
    $_SESSION['hey'] = $hey; 
}
Run Code Online (Sandbox Code Playgroud)

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

我的问题是,从那时起,在使用以下方法的方法中是否会更快:

$hey; //regular variable
Run Code Online (Sandbox Code Playgroud)

或者:

$_SESSION['hey']; //session variable
Run Code Online (Sandbox Code Playgroud)

性能上有区别吗?在高容量下,一个比另一个执行得更快吗?

Ben*_*n D 5

我将在这里附上评论,如果您要优化,则通过消除重复变量不会得到太大改进(尽管如果您有巨大的变量,您希望消除重复以保留内存 - 而不是速度)。但是,为了演示起见,我设置了这个基准来测试:

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 />";
Run Code Online (Sandbox Code Playgroud)

多次运行的结果:

$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 次循环中,我们谈论的是 0.01 微秒。

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