性能優化有一套「發現 → 定位 → 解決」的閉環方法論。本文以真實項目為藍本,從編碼階段到上線監控,給出一條可落地的 Vue 性能優化路線圖。
一、量化指標定位性能瓶頸
任何優化之前先用量化證據鎖死問題。
- Lighthouse 一鍵跑分:首屏、交互、CLS 三條紅線
- Performance 面板錄制:定位長幀、強制同步布局
- 埋點 SDK:把 FP、FCP、TTI、長任務扔給監控平臺
只有當指標低于業務閾值(如 TTI > 3 s)才進入下一步。
二、優化編碼
1.組件拆分與懶加載
- 路由級:
const User = () => import('@/views/User.vue')
- 組件級:
defineAsyncComponent
讓 Modal 按需加載 - 列表級:虛擬滾動
vue-virtual-scroller
只渲染可見行
2.響應式最小化
ref
優于reactive
:減少深層 Proxy 開銷- 凍結只讀數據:
Object.freeze(list)
跳過追蹤 - 事件防抖:
lodash/debounce
把高頻輸入壓到 300 ms 一次
3.緩存一切可緩存
- 組件緩存:
<KeepAlive include="UserCard">
- 計算緩存:
computed
自動跳過無依賴更新 - 請求緩存:
swr
策略避免重復接口調用
三、網絡資源優化
- 圖片:統一 WebP + CDN 自適應寬度
- 圖標:SVG Symbol 代替雪碧圖,減少一次 HTTP 往返
- 第三方庫:
lodash-es
按需導入- 大體積庫走 CDN,webpack 外部化
- 代碼分塊:SplitChunksPlugin 自動分離 vendor、runtime、async chunk
四、打包構建優化
- Tree-Shaking:ESM + sideEffects 白名單
- 并行壓縮:esbuild-loader 把 Terser 換成 Go 實現
- SourceMap:生產環境用 hidden-source-map,既定位又保密
- Bundle 分析:
vite-bundle-analyzer
找出體積大戶
總結
性能優化不是一次性沖刺,而是持續交付的馬拉松。用數據說話,用工具落地,用監控守護——讓每一次代碼提交都帶著性能基因,用戶才會在毫秒級體驗中感受到「絲滑」。