簡體   English   中英

PHP :::速度測試::: $ _SESSION與$ variable

[英]PHP ::: Speed Test ::: $_SESSION vs. $variable

我有一個輸入量很大的表單,它的訪問量也很高。 我聲明$ _SESSION vars,以便在驗證失敗時,不必為了給用戶帶來便利就將通過的數據重寫。

在我像這樣驗證表單輸入后:

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

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

我現在在更新數據庫等的相同方法中有兩個具有相同值的變量。

我的問題是,從該方法開始使用以下方法是否更快:

$hey; //regular variable

或一個:

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

性能上有區別嗎? 大批量生產時,一種產品的性能要比另一種產品更快嗎?

我將在這里發表評論,如果您要進行優化,則不會通過消除重復的變量而獲得很大的改進(盡管如果您有大量的變量,則要消除重復以保留內存,而不是速度)。 但是,為了演示起見,我設置了此基准進行測試:

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 MICROSECONDS。

但是,值得注意的是,速度差異幾乎完全歸因於需要訪問關聯數組。 它是一個超全局的事實並不會影響它(但是,數組的長度會影響它的長度,如果您的SESSION數組很大,您將開始看到微小的速度差異(但同樣,我們談論的是百分之一秒的百分之一)。

我沒有對此進行任何基准測試,但是我強烈懷疑$ _SESSION [] 總是比普通變量寫入慢一些,因為它由文件系統或數據庫支持。 即使所有$ _SESSION []存儲都已緩存,使用該存儲所涉及的CPU和內存活動仍比使用僅本地存儲的變量要多。 對於閱讀而言,仍然可能會有很小的差異,但是與其他因素相比可以忽略不計。

因此,以上評論對金錢是正確的。 您還有其他優化領域比這更重要。

如果您想提高性能,請考慮在JavaScript中復制一些輸入驗證。 (不要替換服務器端驗證,因為JS不是通用的;請盡可能考慮避免使用它的方法。)

在性能上存在邊際差異。 當我說邊緣時,我的意思是非常非常小 它是$_SESSION數組的事實沒有任何性能。 它是關聯數組查找所花的時間比訪問變量所需的時間稍長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM