PHP 效能優化不僅關乎執行速度,更直接影響伺服器資源消耗、併發承載能力與使用者體驗。本文整理 53 條經實戰驗證的優化準則,涵蓋語法層面、資料庫、快取、架構設計等多維度,並附上 opcode 層級原理分析與最佳實踐總結。
echo 'Hello '.$name; 優於 echo "Hello $name";class Foo { public static function bar() {} }$row['id'] 比 $row[id] 快 7 倍,後者會先嘗試尋找常數 idecho $a, $b; 直接輸出,echo $a . $b; 需先建立新字串$len = count($arr); for($i=0;$i<$len;$i++) 避免每次迭代呼叫 count()unset($largeArray); 釋放記憶體,尤其在長時間執行的腳本中關鍵__get、__set、__autoload 觸發機制複雜,效能損耗大require 配合條件判斷更輕量include_path,減少檔案系統查找$_SERVER['REQUEST_TIME'] 取代 time():前者為請求開始時間戳,無需系統呼叫strpos、str_replace 等內建函數比 preg_* 快數倍strtr 比 str_replace 快 4 倍:單字元轉換時 strtr 極致高效error_reportingdisplay_errors,改寫入日誌$i++ 約等同函數區域變數速度$this->prop++ 涉及物件屬性查找isset($str{5}) 替代 strlen($str) < 5:語言結構比函數呼叫快,避免哈希查找++$i 優於後置 $i++:前者 3 指令,後者 4 指令(產生暫存變數)file_get_contents:替代 fopen/fread 系列,效率高得多foreach 優於 while/for:內部優化迭代器i+=1、用完 unset($global):微優化積少成多| # | 策略 | 關鍵動作 |
|---|---|---|
| 1 | 絕對路徑載入 | require '/var/www/lib/foo.php'; |
| 2 | 迴圈外預計算 | $c=count($a); for($i=0;$i<$c;$i++) |
| 3 | 錯誤報告隔離 | error_reporting(0); ini_set('display_errors',0); |
| 4 | 避免深層巢狀迴圈 | 扁平化演算法、資料結構重設計 |
| 5 | 迴圈外移資料庫查詢 | 批次查詢、JOIN 替代 N+1 問題 |
| 6 | 單引號字串連接 | echo 'a'.$b.'c'; |
| 7 | 減少變數複製 | 直接用 $_POST['key'] 或引用傳遞 |
| 8 | switch 替代長 if-else 鏈 | 可讀性與效能雙贏 |
| 9 | 啟用快取機制 | OPcache + Redis/memcached 多層快取 |
| 10 | 開啟 Gzip 壓縮 | zlib.output_compression = On 或 Nginx/Apache 模組 |
優化無終點,但有重點。掌握「語言結構優於函數、內建函數優於自寫、靜態優於動態、快取優於計算、簡單優於複雜」五大核心原則,配合持續的效能分析與針對性調優,才能讓 PHP 應用在高併發場景下穩健高效運行。