Google 發布《網站加速技巧大全》,其中針對 PHP 的幾條建議在社區引發軒然大波。PHP 核心開發團隊隨即公開公開信逐條「抓蟲」,指出這些建議**在現代 PHP(5.2+)版本中全部錯誤**,甚至源自過時的 PHP 3/4 時代認知。本文整理核心駁論。
錯誤。 PHP 採用 **Copy-on-Write (COW)** 記憶體管理。賦值 $b = $a 僅增加符號表引用,實際資料不複製。只有當任一變數被修改時才觸發真實複製。
$data = str_repeat("*", 512*1024); // 512KB
$before = memory_get_usage();
$more = $data; // 複製變數
$after = memory_get_usage();
echo "差異: " . ($after - $before) . " bytes";
實測結果: 僅相差 **64–268 bytes**(符號表開銷),而非雙倍記憶體。盡管如此,**仍應避免直接 echo/儲存未過濾的使用者輸入**,防止 XSS 與注入攻擊。
錯誤。 PHP 5.2/5.3 基準測試顯示,雙引號(內插變數)與單引號(連接字串)速度**幾乎相同**,甚至雙引號常略快。純靜態字串用雙引號效能更佳。
視環境而定。 兩者速度差異取決於 PHP 安裝配置(如是否啟用 opcode cache、輸出緩衝等),無絕對優劣。
事實相反。 新版引擎優化了單次 echo 多參數或連接字串的輸出,**echo 'a' . 'b' 比多次 echo 'a'; echo 'b'; 更快**。
純屬胡說八道。 兩者執行速度**基本一致**,選擇應基於程式碼可讀性與維護性,而非效能迷思。僅在極特定情況(如大量連續整數比較)switch 略有優勢。
Google 的建議可能基於 **PHP 3 / 早期 PHP 4** 版本特性。在現代 PHP(5.2+,特別是 5.3、5.4、7.x、8.x)中,Zend Engine 已經歷多代重寫與優化,這些「技巧」不僅無效,甚至可能導致反模式。開發者應關注:
- 使用最新穩定版 PHP(目前 8.2+)
- 啟用 Opcode Cache(OPcache 內建)
- 善用框架內建優化(路由快取、配置快取、視圖快取)
- 資料庫索引、查詢優化、HTTP 快取頭、CDN 等架構層面優化
盲目套用過時微優化,不如專注於架構設計與演算法複雜度。