用戶眼中的「打開網頁」背後,是 DNS 解析、TCP 連接、服務端處理、瀏覽器渲染四大階段。本文從程序員視角,拆解每個階段的優化切入點,給出數據庫、緩存、前端資源、集群擴展的具體實施策略。
maximumPoolSize ≈ CPU 核心數 × 2(IO 密集),minimumIdle 保持熱連接,connectionTimeout 30s,idleTimeout 10min。long_query_time=1,定期分析 EXPLAIN 執行計劃。LIKE '%xxx%' 改全文索引/ES。LIMIT 100000, 10 改為游標/ID 續傳 WHERE id > 100000 LIMIT 10。| 層級 | 技術 | 場景 | 關鍵配置 |
|---|---|---|---|
| 本地堆內 | Caffeine / Guava Cache | 極熱數據、單機低延遲 | maximumSize, expireAfterWrite |
| 分布式 | Redis Cluster / Redis Sentinel | 會話、Token、熱點商品 | TTL、過期淘汰、Lua 腳本原子操作 |
| 二級緩存 | Hibernate L2 / MyBatis Cache | 實體對象、只讀引用數據 | read-only, region, concurrency-strategy |
| 頁面片段 | ESI / SSI / 模板引擎緩存 | 商品詳情、列表頁局部 | fragment key 包含版本/租戶 |
緩存一致性:讀寫分離場景用 Canal 監聽 Binlog 異步刷新 Redis,或雙寫 + 失效重試。
terser 壓縮、cssnano 壓縮。gzip on; gzip_types text/css application/javascript;,預壓縮 .gz/.br 文件直發。<script defer>:HTML 解析完再按序執行(推薦)。<script async>:下載完立即執行,順序不定(適用獨立第三方 SDK)。import() 動態導入,按需加載路由級組件(代碼分割)。Cache-Control: max-age=31536000, immutable(帶 Hash 文件名)。ETag/Last-Modified,HTML/動態資源驗證更新。least_conn / ip_hash,或云 LB (ALB/CLB)。async-profiler 定位 CPU 熱點、鎮爭、分配率。Web 性能優化是系統工程,服務端聚焦數據庫與緩存,前端聚焦資源體積與加載策略,架構層面做無狀態與水平擴展。建立監控體系,用數據驅動優化,而非憑感覺調優,才能持續交付極致用戶體驗。