靜態化是高流量 PHP 網站的核心優化手段。本文歸納三種輸出捕獲方式與兩種部署架構,助你根據業務場景選擇最適方案。
| 模式 | 實作方式 | 優點 | 缺點 |
|---|---|---|---|
| 1. 字串拼接 | 將所有 echo/print 改為變數累加,最後 file_put_contents | 完全可控、無額外依賴 | 改造舊專案成本高、程式碼冗長 |
| 2. Output Buffering (ob_*) | ob_start() 開啟緩衝,ob_get_contents() 取得內容 | 非侵入式、相容既有程式碼 | 巢狀緩衝需小心處理、記憶體佔用大 |
| 3. 模板引擎 fetch/get | Smarty/Blade/Twig 等 $tpl->fetch() 直接回傳字串 | 關注點分離、前後端協作友善 | 需引入模板引擎、學習曲線 |
管理後台新增/編輯內容
│
▼
PHP 程式生成 HTML 寫入 /html/article/123.html
│
▼
前端 Nginx/Apache 直接服務靜態檔案
用戶請求 /article/123.html
│
▼
Nginx try_files /html/article/123.html /generate.php?id=123
│
▼ (靜態檔不存在)
PHP 檢查 → 生成靜態檔 → 301/302 重導向或直接輸出
│
▼ (靜態檔存在)
直接服務靜態檔
Cache-Control: max-age=31536000, immutable 實現極速分發。沒有銀彈,只有適合當下業務階段的架構。早期用架構 B 快速上線;流量增長後逐步遷移至架構 A + 片段快取 + CDN,並引入非同步生成佇列,即可平滑演進至千萬級 PV 架構。