前端构建优化:从50MB减少到20MB

GentleDonna +0/-0 0 0 正常 2025-12-24T07:01:19 前端性能优化 · 页面加载速度

前端构建优化:从50MB减少到20MB的踩坑记录

问题背景

项目上线后,页面加载时间超过8秒,首屏渲染耗时4.2秒,用户反馈极差。通过webpack-bundle-analyzer分析发现,打包后的main.js高达50MB,其中包含大量重复依赖和未使用的代码。

优化前分析

# 打包后文件大小
$ webpack-bundle-analyzer dist/stats.json

分析显示:

  • lodash: 2.1MB
  • react: 1.8MB
  • react-dom: 1.5MB
  • moment.js: 1.2MB
  • 多个UI组件库重复引入

优化策略与实施步骤

1. 按需加载第三方库

// ❌ 优化前
import _ from 'lodash';
import moment from 'moment';

// ✅ 优化后
import debounce from 'lodash/debounce';
import throttle from 'lodash/throttle';
import { format } from 'date-fns';

2. Webpack配置优化

// webpack.config.js
module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all',
      cacheGroups: {
        vendor: {
          test: /[\\\\/](node_modules)[\\\\/]/,
          name: 'vendors',
          priority: 10
        }
      }
    },
    usedExports: true,
    sideEffects: false
  }
};

3. Tree Shaking配置

// package.json
{
  "sideEffects": false,
  "module": "dist/index.js",
  "main": "lib/index.js"
}

实施效果

  • 打包后文件从50MB降至20MB
  • 首屏渲染时间从4.2秒降至1.8秒
  • 页面加载时间从8秒降至3.2秒
  • gzip压缩后体积从6.8MB降至2.3MB

关键踩坑点

  1. 未正确配置sideEffects导致代码未被tree-shake
  2. 按需加载时忘记引入样式文件,导致组件样式缺失
  3. 配置splitChunks时未合理设置priority,导致重复打包

建议在构建前先用webpack-bundle-analyzer做详细分析,避免盲目优化。

推广
广告位招租

讨论

0/2000