标准答案

  1. 先用可视化工具或构建报告看每个 chunk 的大小、组成和依赖来源。
  2. 重点检查大依赖、重复依赖、多版本依赖、全量引入和没有被摇掉的代码。
  3. 常见优化包括路由懒加载、组件懒加载、manualChunks、按需引入、替换重依赖、移除无用 polyfill。
  4. 还要结合网络瀑布、首屏性能和缓存策略判断优化是否真的有效。
  5. 优化不能只看 gzip 后大小,也要考虑解析和执行 JavaScript 的成本。

题目解析

bundle 分析不是为了追求数字好看,而是为了知道用户首屏到底下载、解析、执行了什么。体积大只是表象,背后可能是依赖选型、拆包策略、公共模块抽取或 Tree Shaking 问题。

优化前要先定位来源。比如图表库全量引入、日期库多语言包、组件库没有按需导入、重复打包两个版本的依赖,处理方式完全不同。

优化后也要复核用户体验。有时拆包让首屏包变小了,但请求变多、点击后等待变长,整体体验未必更好。

代码示例

Vite / Rollup 可以通过可视化插件查看产物组成。

JavaScript
import { visualizer } from 'rollup-plugin-visualizer'

export default {
  plugins: [
    visualizer({
      filename: 'dist/stats.html',
      gzipSize: true,
      brotliSize: true
    })
  ]
}

常见误区

  • 没有分析报告就开始改拆包配置,优化方向靠猜。
  • 只关注总体积,不看首屏关键路径和 JavaScript 执行成本。
  • 拆包过细导致请求瀑布变长,用户点击后等待更多。

作者信息