專案背景:歷史債務與領導意志的雙重驅動
- 老首頁 2009 年上線,長期「打補丁」式迭代,各部門爭奪首頁資源位。
- 無性能規範,唯一標準「功能跑通」。
- 前端團隊痛不欲生,向上反映無果,直到領導海外訪問對比 818.com(同團隊維護,極快)與 5173.com(極慢),專案獲批。
問題診斷:觸目驚心的性能黑洞
| 指標 | 優化前 | 嚴重程度 |
| CSS 外鏈數 | 12 個 | 阻塞渲染、緩存碎片化 |
| JS 外鏈數 | 41 個(含 15 個廣告) | 嚴重阻塞主線程、依賴混亂 |
| 頁面總體積 | 超大,多數靜態資源無 gzip,動態 JS 未壓縮 | 首屏白屏時間極長 |
| IE6 滾動 CPU | ≥ 80% | 內存洩漏、佈局抖動 |
| 廣告加載方式 | document.write 同步阻塞 | 頁面渲染斷裂 |
| iframe 數量 | 7 個 | 並行連接佔用、安全風險 |
| 數據源接口 | 多源混亂、無緩存、響應慢 | 前端被動等待、邏輯耦合 |
目標只有三個字:快、更快、最快。
核心實施策略與技術細節
HTML & CSS 徹底重構
- 嘗試 HTML5 新語義標籤(
header/nav/section/article/aside/footer)重構文檔結構。
- CSS 合併:12 個外鏈 → 1 個主文件。模組化開發(@import 合並),發布構建時打包壓縮。平衡「緩存粒度」與「請求數」。
- 選擇器簡化:禁止長選擇器(>3 級)、禁止 ID 選擇器、禁止
!important。採用 Class + Tag 組合,BEM 命名,控制 CSS 權值,利於維護。

JavaScript 重構:從 41 個外鏈到模組化按需加載
- 四級聯動搜索(游戲/區/服/交易類型):
- 最大 JSON 包 94.4KB → DOMReady 後異步載入,拼裝首屏 HTML 並緩存(
$.fn.data)。
- 用戶選字母索引 → 讀緩存渲染 → 選區/服/類型 → 再請求對應 JSON → 拼裝緩存。極大減少主線程阻塞。

- 便民中心(多 Tab 表單):
- 原邏輯:每次切 Tab 請求 JSON → 生成 HTML → 極度浪費。
- 重構:首次載入所有 Tab 數據 → 一次性生成所有 HTML 結構緩存 → 切 Tab 直接顯示對應 DOM。動態站點文件加 gzip + 緩存。

延遲加載:首屏極速的關鍵戰術
- 首屏以下圖片全部
loading="lazy" / JS 監聽 IntersectionObserver 延遲載入。
- 難點:第三方廣告腳本(含首屏輪播大圖)用
document.write 注入、合作站點用 iframe 嵌入,均為阻塞元兇。
- 破解方案:Textarea 延遲加載法(玉伯提案)。將廣告 JS/iframe 代碼塞入
<textarea>(瀏覽器不解析執行),需要時 innerHTML 取出插入 DOM。
適用:廣告、iframe、第三方組件、非首屏 CSS/JS。副作用:SEO 影響需評估(重要內容勿用)。
服務端協同優化:前端性能的隱形基石
- 數據源聚合:多部門接口 → 統一中間層服務器 → 前端單一入口。層間通訊加緩存(TTL 策略),解決慢與不穩。
- 全站靜態資源強制 gzip:單純此項即帶來明顯體積下降。
- 瀏覽器緩存策略:除登錄/cookie 類高時效請求外,所有靜態資源加
Cache-Control: max-age=31536000(1 年)。更新機制:文件名含 hash/時間戳(app.v20231015.js)。
- Varnish 緩存加速層:國內大型站鮮見的邊緣緩存部署,極大降低源站壓力,提升 TTFB。
優化成果:數據說話
| 指標 | 優化前 | 優化後 | 提升幅度 |
| 總請求數 | ~100+ | ~20 | -80% |
| 靜態資源體積 | ~1.2MB | ~480KB | -60%(節省 494KB/次) |
| 首屏白屏時間 | > 5s | < 1.5s | -70% |
| 首屏可交互時間 | > 8s | < 3s | -62% |
| IE6 滾動 CPU 佔用 | 80%+ | < 20% | -75% |
| 服務器節省 | - | - | 可下線多台服務器 |

按日 PV 100 萬估算,年節省頻寬成本可觀;用戶體驗質變,業務指標同步上揚。
方法論總結:性能優化的「道與術」
- 數據先行:無數據不優化,建立性能基線與監控儀表盤。
- 全鏈路視角:前端/後端/網絡/瀏覽器/業務邏輯,系統性施策。
- 敢於重構:歷史包袱必須徹底清理,增量修補治標不治本。
- 工程化手段:構建工具自動化(合併/壓縮/哈希/圖片優化/內聯關鍵 CSS)。
- 降級與兜底:延遲加載、Textarea 法、Varnish 緩存,均有降級預案。
- 持續迭代:性能優化無終點,納入每個迭代的 Definition of Done。
5173 專案證明:沒有優化不了的頁面,只有不願意動真格的團隊。當前端、後端、運營、領導對齊「快」的價值,技術債務就能被系統性清償。