PHP 效能優化非單一銀彈,而是「語法習慣、資料庫設計、伺服器配置、架構演進」的系統工程。本文整理實戰驗證的優化要點,按影響大小排序。
; php.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60 ; 生產環境 0 需手動清除
opcache.validate_timestamps=1
效果:免去編譯開銷,吞吐量通常提升 2-10 倍。
composer dump-autoload -o --classmap-authoritative
生成 classmap 避免檔案系統掃描。
EXPLAIN 分析慢查詢,補齊索引。SELECT *,只取需要欄位。WHERE id > last_id LIMIT 20(游標分頁)。INSERT ... VALUES (...), (...), ... 替代循環單筆。fastcgi_cache / proxy_cache 快取全頁或片段。Cache-Control + 指紋檔名。| 建議 | 說明 | 影響 |
|---|---|---|
| 避免在循環中重複計算 | $len = count($arr); for($i=0;$i<$len;$i++) | 中 |
字串連接用單引號、sprintf 或陣列 join | 雙引號需解析變數,單引號最快 | 微 |
=== 代替 == | 避免型別轉換,且語意更明確 | 微 |
isset($arr[$k]) 優於 array_key_exists | 語言結構 vs 函式呼叫 | 微 |
避免 @ 抑制錯誤 | 極大降低效能,改用錯誤處理器 | 大 |
大陣列傳參考 function(&$arr) | 避免複製,但 PHP 7+ 寫時複製機制已優化,實測後再決定 | 視情況 |
opcache.jit_buffer_size=100M,計算密集型任務顯著加速。xhprof/Blackfire/Tideways 找真正熱點。$a='str' vs "str" 差異奈秒級,真實瓶頸通常在 IO(DB、API、檔案)。Generator (yield) 流式處理,避免一次載入爆記憶體。slowlog、PHP-FPM request_slowlog_timeout。long_query_time=1。PHP 優化核心是「減少 IO、減少 CPU 浪費、增加快取層級」。先啟用 OPcache、調優資料庫、上 CDN,這三步解決 80% 問題。再針對業務熱點引入異步佇列、Swoole 或 JIT,逐步演進高效能架構。