許多團隊優化網站速度時,陷入「工具導向」誤區:跑 YSlow/PageSpeed、合併 JS/CSS、開啟 Gzip、配置快取標頭,做完發現速度毫無起色。根因在於**未找到真正瓶頸**,而是盲目套用最佳實踐。本文建立「瓶頸優先」的效能分析方法論。
| 維度 | 錯誤導向 (工具驅動) | 正確導向 (瓶頸驅動) |
|---|---|---|
| 起點 | 跑分工具給的建議清單 | 實際用戶體驗慢的具體場景 |
| 動作 | 逐項套用工具建議 | 測量→定位瓶頸→針對性解決 |
| 心態 | 「做了總比不做好」 | 「不解決瓶頸,其他優化無意義」 |
| 結果 | 忙碌但無感知提升 | 精準擊中主因,立竿見影 |
系統整體效能由**最短木板**決定:
用戶瀏覽器
│ HTTP Request
▼
Nginx/Apache (靜態資源直接回應 / 動態轉發)
│ FastCGI/Proxy
▼
PHP-FPM (解析執行)
│ PDO/MySQLi
▼
MySQL (查詢執行)
│
▼
PHP 組裝 HTML
│
▼
Nginx 發送 Response
│ 網路傳輸 (延遲/帶寬)
▼
瀏覽器接收 → 解析 HTML → 發起子資源請求 (CSS/JS/圖片) → 渲染呈現
<?php
// 入口文件最頂部
$startTime = microtime(true);
// 註冊關閉函數
register_shutdown_function(function() use ($startTime) {
$duration = microtime(true) - $startTime;
error_log("PHP_SCRIPT_TIME: {$duration}s | URL: {$_SERVER['REQUEST_URI']}");
// 或寫入 Redis/StatsD/InfluxDB 供監控系統聚合
});
# 1. 保存首頁完整 HTML (瀏覽器另存為 / curl) curl -o /var/www/html/static_index.html https://yoursite.com/ # 2. 直接訪問靜態頁 # 瀏覽器開發者工具 Network 面板觀察 # - TTFB (Time To First Byte) # - Content Download # - Total Time
| 狀態文字 | 含義 | 瓶頸指向 |
|---|---|---|
| 「正在等待回應」/ Waiting for server response | 瀏覽器發出請求,服務端尚未發送第一個位元組 | 後端處理慢 (PHP/DB/鎖/外部 API) |
| 「正在接收資料」/ Receiving data / Content Download | 服務端已發送,瀏覽器正在下載 | 網路頻寬/延遲、回應體過大 |
| 「已完成」但頁面空白/樣式錯亂 | HTML 下載完,CSS/JS/圖片尚未載入 | 子資源載入慢、阻塞渲染資源 |
場景: 服務器在美國,用戶在中國/英國,PHP 執行 0.2s,但頁面載入 5s+。
總耗時 5000ms - PHP 執行: 200ms (4%) - 網路傳輸: 4800ms (96%) ← 瓶頸! - TTFB: 300ms (含 PHP) - Download: 4500ms (HTML+靜態資源跨太平洋傳輸)
| 瓶頸類型 | 識別特徵 | 驗證方法 | 解決方向 |
|---|---|---|---|
| 資料庫 | 慢查詢日誌多、PHP 等待佔比高、CPU 低 | EXPLAIN、慢查詢分析、Show Processlist | 索引、分表、讀寫分離、快取、SQL 改寫 |
| PHP 邏輯 | 大量迴圈、遞歸、外部 HTTP 呼叫、記憶體飆升 | Xdebug/Blackfire 分析火焰圖 | 演算法優化、非同步佇列、快取、分頁 |
| 鎖競爭 | 高併發時 RT 飆升、CPU 低、資料庫鎖等待高 | InnoDB 監控、show engine innodb status | 減少鎖範圍、樂觀鎖、分佈式鎖、業務解耦 |
| 網路延遲 | 靜態頁也慢、跨國訪問、TTFB 大 | Ping/Traceroute、不同地區測速 | 就近部署、CDN、HTTP/2、壓縮 |
| 前端渲染 | 白屏久、JS 執行久、主線程阻塞 | Performance 面板、Lighthouse | 代碼分割、Web Workers、SSR/SSG、虛擬列表 |
P0 (必須解決,否則系統不可用): - 資料庫死鎖/鎖等待導致大面積超時 - 記憶體洩漏導致 PHP-FPM 頻繁重啟 - 單點故障 (單資料庫、單緩存節點) P1 (核心業務路徑明顯慢): - 關鍵 API P99 > 3s - 首屏載入 > 5s (核心市場) - 併發支撐不足 (目標 QPS 未達標) P2 (體驗優化): - 非核心頁面速度提升 - 資源壓縮、合併、快取策略微調 - 前端渲染優化 P3 (錦上添花): - 極致壓縮 (Brotli、WebP、AVIF) - HTTP/3、Early Hints - 邊緣計算 (Cloudflare Workers、Lambda@Edge)
下次面對「網站慢」需求時,請先問三個問題:哪個頁面?哪個地區用戶?瀏覽器 Network 面板顯示什麼狀態? 帶著答案去找瓶頸,而非帶著工具清單去湊數字。