2014-04-17 23 views
-1

我做我的網站上整理microoptimizations並注意到,在許多被通過AJAX叫我的PHP文件,我有多次使用的PHP文件中的$ _ GET變量:

<?php include 'connect.php'; 

$var = $_GET['x']; 

$var1 = $var . "..."; 
$var2 = $var . $var; 

$sql = mysqli_query($cxn, "SELECT user FROM login WHERE login_id = '$var'"); 

//etc. 

在這一點,我的想法是,如果代碼被改寫爲:

<?php include 'connect.php'; 

$var1 = $_GET['x'] . "..."; 
$var2 = $_GET['x'] . $_GET['x']; 

$sql = mysqli_query($cxn, "SELECT user FROM login WHERE login_id = 
'".$_GET['x']."'"); 

//etc. 

此,而等同於輸出的一個代碼塊,實際上會比較慢,因爲代碼必須$ _GET「X」 4倍獨立倍而不是第一塊代碼中的一次。第一個更快,因爲$ _GET ['x']的這個拷貝被訪問和更快地處理。同樣,我想這也將適用於PHP函數()和$ _ POST,如以下幾點:

$unixtime = time(); 

while ($row = mysqli_fetch_assoc($sql)) { 
$TimeVar = $unixtime; //Good....a copy of time() is used each time, so time is 
calculated only once 
} 

VS:

while ($row = mysqli_fetch_assoc($sql)) { 
$TimeVar = time(); //Bad....time() is recalculated for each iteration of the while loop 
} 

所以,做$ _GETs和$ _POSTs得到每個單獨處理實例?諸如time()之類的函數? 對不起,初學者的水平問題...希望這是確定:)

+0

什麼實際問題? :) –

+1

代碼1與代碼2的執行方式完全相同。每次使用時,您都不必「獲取」$ _GET數組。 php在腳本運行之前處理查詢字符串,並且與之後的任何其他變量一樣存在。 –

+0

對不起!在結束時添加問題 –

回答

0

$_GET$_POST$_SERVER$_SESSION等,都是在腳本處理的開始初始化一次所有的全局變量。不管你訪問一次還是一百萬次,創建變量所花的時間都是一樣的。

這就是說,分配給定值的變量可能給你一點性能的差異。的$_GET['x']數組查找,因爲它必須解析字符串,轉到數據結構,並從那裏拉,可能需要一點時間。然而,將其分配給一個變量可能使發動機使用更多的內存(我不知道如果PHP沒有寫入時複製或沒有),而且可能做得更多從高速緩存交換到內存和背部,因爲它具有訪問不同變量。

這就是說,任何差別將是十分之一或毫秒頁面加載的百分之幾的量級。比你可能測量的要少得多,並且遠小於頁面加載的典型變化。

+0

偉大的答案....我來自的地方是,如果我有幾千個「效率低下」代碼的實例,這將加起來非常不重要的時間......這不是一個瘋狂的概念。我現在可以想像的最好的例子是,如果「無效率」是在一段時間或foreach循環....試想如果低效的代碼塊(讓我們用你的電話號碼....一毫秒的十分之一),是在1000迭代foreach循環。不應該執行低效代碼塊foreach循環(所有其他條件相同)1000 x 0.0001秒= 0。慢1秒?這在我看來並不是一個微不足道的時間。 –

+0

@ ChemBlob999:我打算說,在成千上萬次這樣的變化過程中,你可能會做出百分之一秒的差異,而不是你每次都做得那麼多。 但是,我的主要觀點是,這種微觀優化是不值得的時間。您更關注於更大的優化和/或升級硬件。這就是你開始看到真正收益的​​地方。 – Tarka