马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、编译工具更换(突破传统性能瓶颈)
- 使用 SWC 更换 Babel
- SWC(Speedy Web Compiler)是基于 Rust 的 JavaScript 编译器,编译速率比 Babel 快 20 倍以上。
- // 安装 @swc/core 和 swc-loader
- module: {
- rules: [{
- test: /\.js$/,
- use: { loader: 'swc-loader' } // 替代 babel-loader
- }]
- }
复制代码 - 使用 esbuild 压缩代码
- 用 esbuild 更换 Terser 压缩 JS/CSS,速率提升明显。
- const { ESBuildMinifyPlugin } = require('esbuild-loader');
- optimization: {
- minimizer: [new ESBuildMinifyPlugin({ target: 'es2015' })]
- }
复制代码
二、分包计谋进阶
- 预编译资源分包(更换 DLL)
- Webpack 5 保举使用 cacheGroups 更换过期的 DLL 插件,但针对超大第三方库(如 monorepo 场景)可手动分包:
- splitChunks: {
- cacheGroups: {
- antd: {
- test: /[\\/]node_modules[\\/](antd|@ant-design)[\\/]/,
- name: 'antd-chunk',
- priority: 20
- }
- }
- }
复制代码 - 预加载与预渲染(Runtime 优化)
- 联合 import(/* webpackPrefetch: true */ './module') 实现资源预加载,优化用户体验。
三、资源加载计谋优化
- 字体文件按需加载
- 使用 subset 工具(如 fontmin-webpack)裁剪字体文件,仅生存项目中使用的字符集。
- // 示例配置(需安装 fontmin-webpack)
- plugins: [
- new FontminPlugin({
- autodetectText: text => [...new Set(text)].join('')
- })
- ]
复制代码 - Base64 内联小文件
- 对小于 10KB 的图片/SVG 自动转为 Base64,淘汰 HTTP 哀求:
- {
- test: /\.(png|svg)$/,
- type: 'asset/inline',
- parser: { dataUrlCondition: { maxSize: 10 * 1024 } }
- }
复制代码
四、环境与设置优化
- 区分开发/生产环境设置
- 使用 webpack-merge 分离环境设置,克制生产环境包罗开发工具(如 Redux DevTools)。
- // webpack.prod.js
- module.exports = merge(baseConfig, {
- mode: 'production',
- devtool: 'source-map'
- });
复制代码 - NPM 依靠分析
- 使用 npm ls --depth=10 或 yarn why <package> 查抄重复依靠,淘汰冗余代码。
五、构建流程增补优化
- 清算构建残留文件
- 使用 clean-webpack-plugin 确保每次构建前清空输出目次:
- const { CleanWebpackPlugin } = require('clean-webpack-plugin');
- plugins: [new CleanWebpackPlugin()]
复制代码 - 启用 HTTP/2 服务推送(开发环境)
- 在 devServer 中设置 HTTP/2,提升当地开发资源加载服从:
- devServer: {
- http2: true,
- https: true // HTTP/2 需要 HTTPS
- }
复制代码
六、框架级优化
- React/Vue 专项优化
- React:使用 @loadable/component 实现更细粒度的代码分割。
- Vue:通过 unplugin-vue- 使用 unocss或tailwindcss` 天生按需使用的原子化 CSS,淘汰冗余样式。
七、监控 与自动化
- CI/CD 集因素析
- 在连续集成中接入 webpack-bundle-analyzer,每次构建后天生陈诉存档。
- 自界说性能阈值
- performance: {
- hints: 'error',
- maxAssetSize: 500 * 1024, // 单个文件最大 500KB
- maxEntrypointSize: 1000 * 1024 // 入口文件最大 1MB
- }
复制代码
八、冷门但有用的本事
- 禁用 sourceMap 开发依靠
- 生产环境彻底关闭 sourceMap(或使用 hidden-source-map 仅生存错误追踪)。
- 优化 resolve 设置
- resolve: {
- alias: { '@': path.resolve(__dirname, 'src') }, // 缩短引用路径
- extensions: ['.js', '.jsx'], // 减少文件后缀搜索
- symlinks: false // 禁用软链接解析(适用于 monorepo)
- }
复制代码 - Polyfill 按需加载
- 通过 browserslist 指定目的欣赏器范围,联合 core-js 的 usage 模式自动按需注入 Polyfill。
优化结果验证
- 构建速率对比:使用 speed-measure-webpack-plugin 量化优化前后的差别。
- 产物体积监控
:接入 Lighthouse CI 或自建监控 平台,恒久跟踪关键指标(如 TTI、FCP)。
通过组合使用上述计谋,可覆盖从代码编译到资源加载的全链路优化,尤其适当中大型项目或对性能要求极高的场景。
|