构建产物分析与 bundle 体积优化的七种手段
从看懂 bundle 分析报告开始,系统性地给出压缩首屏体积的七种实用手段,附每种手段的适用场景与收益。
首屏体积是性能优化的第一战场。但在动手之前,先要看得懂产物的构成。本文介绍一套从分析到优化的完整流程。
先建立可视化认知
用打包分析工具生成依赖树与体积地图:
# Rspack / Webpack
pnpm add -D webpack-bundle-analyzer
# 或使用 Rspack 内置的 stats 分析
重点关注三件事:哪些包体积异常、哪些代码被重复打包、哪些依赖本可延迟加载。
七种优化手段
1. 代码分割(Code Splitting)
按路由懒加载是最基础的优化,把首屏不必要的代码切出去。
const Home = lazy(() => import('./Home'));
2. 移除未使用代码(Tree-shaking)
确保库以 ESM 形式提供,配合 sideEffects: false 声明,让构建器大胆剔除死代码。
3. 第三方依赖瘦身
- 用
lodash-es替代lodash,或直接按需引入; - 排查「一个工具函数引入整个库」的情况(如
import moment)。
4. 优化依赖版本
相同库的多版本会同时被打入。用 pnpm why 找出版本冲突,统一升级。
5. 压缩与混淆
生产环境务必开启 Terser/SWC minify,并配置合适的压缩等级。
6. 资源外置(external)
将体积大、更新频率低的库(如地图 SDK、图表库)通过 CDN 外链引入,脱离主 bundle。
7. 运行时共享
把 React、Vue 等运行时抽成独立 chunk,配合长缓存策略,让二次访问命中缓存。
建立体积预算
优化要可持续,就要把目标量化。在 CI 中加入体积预算:
{
"budgets": [
{ "resourceType": "script", "baseline": 300, "budget": 350 }
]
}
一旦产物体积超出预算,CI 直接失败,倒逼团队在每次提交时就关注体积。
结语
体积优化没有一劳永逸,它是一套持续治理的机制。把分析工具、预算门槛接入流水线,比一次性的大扫除更有效。