2012-04-14 163 views
-2

我不是一個PHP大師,需要你的幫助。php腳本優化

我有一個PHP窗體與選擇菜單。該菜單由客戶電子郵件形成。我已經使用了以下代碼:

for($i = 0; $i < sizeof($customers_table); $i++){ 
    echo '<option value="'.$customers_table[$i]['id'].'">'.$customers_table[$i]['email'].'</option>'; 
} 

底座比較大,所以需要花時間來形成選項字段。有沒有什麼辦法來優化腳本,這樣它的工作速度會更快。

謝謝。

+1

除非您使用自動完成功能,否則肯定會在選擇框中有成千上萬的選項不會對用戶友好? – Andy 2012-04-14 15:47:54

+0

不要在for語句中創建'sizeof()',而是使用該值創建一個變量,所以不會在每個循環調用中調用它。但這只是一個微不足道的優化,因爲我認爲PHP本身就會插入這樣的弱點。你必須在更大的範圍內看到你的腳本。 – 2012-04-14 15:49:27

回答

1

由於尺寸沒有變化,其存儲:

$size = sizeof($customers_table); 
for ($i = 0; $i < $size; $i++) { 
    echo '<option value="'.$customers_table[$i]['id'].'">'.$customers_table[$i]['email'].'</option>'; 
} 

然後你就可以縮短循環條件,降低了數組訪問:

$i = $size = sizeof($customers_table); 
while ($i) { 
    $table = $customers_table[$size-$i--]; 
    echo '<option value="'.$table['id'].'">'.$table['email'].'</option>'; 
} 

接下來的部分是回聲聲明,可以只輸出,而不是在輸出它們之前進行協調字符串:

$i = $size = sizeof($customers_table); 
while ($i) { 
    $table = $customers_table[$size-$i--]; 
    echo '<option value="', $table['id'], '">', $table['email'], '</option>'; 
} 

如果這使得不同你需要指標。最大的時間可能是您發送給瀏覽器的HTML數量。但是這將超出這個片段的範圍。

提高代碼的整體可讀性我建議使用foreach

foreach ($customer_table as $row) 
{ 
    echo '<option value="', $table['id'], '">', $table['email'], '</option>'; 
} 

這通常是相當快爲好。

+0

你確定這是一個優化? – Starx 2012-04-14 15:49:42

+0

@Starx:是的,絕對。調用sizeof或count是非常昂貴的。無論如何,優化可能是微不足道,你不能真正感受到差異^^ – hakre 2012-04-14 15:54:03

0

正如Andy所說,以這種方式優化此腳本並不是一個好主意。 如果您想要重大的時間更改,您必須重新考慮問題。

你有一個客戶的列表,如果有時間問題,我認爲有很多。所以,下拉列表對於用戶來說是無用的。

還有其他的解決方案,更高效:

  • 使用排序緩存> HTML代碼將永遠是一樣的,所以你只需要做一次循環,當您添加,刪除或更新客戶,並將html代碼存儲在腳本或數據庫中。所以,每次你的頁面重新加載時,你只需要檢索html代碼。
  • 不加載所有客戶>用戶無需查看所有客戶,只需查看他感興趣的所有客戶,因此使用某些Ajax時,可以在用戶輸入時加載選項(例如,請參閱:jQuery Autocomplete

這些解決方案是最適合優化的,如果將它們結合起來(緩存和自動填充超過3個字符鍵入),它對用戶體驗來說也會更好。