概述
先介绍几种速度与体积分析方法的使用,紧接着介绍各种优化方法的使用:多进程构建解析、并行压缩、使用DLLPlugin分包、使用缓存、缩小构建目标、减少文件搜索范围、CSS的Tree Shaking、图片压缩、动态Polyfill。
详述
初级分析
内置的 stats,默认每次构建控制台都会显示各种统计信息,当然也可以把统计信息导出到单独文件:
1 | // package.json |
速度分析
使用speed-measure-webpack-plugin
,分析整个打包总耗时,每个插件和 loader 的耗时情况。使用示例如下:
1 | // webpack.config.js |
体积分析
使用webpack-bundle-analyzer
,构建完成自动打开 8888 端口页面,可视化分析各个部分大小。使用示例如下:
1 | // webpack.config.js |
详细见官网
使用高版本的 webpack 和 Node.js
毋庸赘述,工具本身每次版本升级,基本都会有相应的性能提升。
多进程/多实例:构建解析
资源并行解析可选方案,webpack4.x 推荐用thread-loader
,之前版本可以用happypack
插件。thread-loader
使用示例如下:
1 | // webpack.config.js |
多进程/多实例:并行压缩
webpack4.x 推荐用terser-webpack-plugin
,其他版本可选方案parallel-uglify-plugin
、uglifyjs-webpack-plugin
。terser-webpack-plugin
使用示例如下:
1 | // webpack.config.js |
分包
前面的文章中介绍过可以用html-webpack-externalsplugin
来分离基础包,或者用splitChunks
来提取公共包。除此之外,更好的分包方式是用DLLPlugin
,这个方式是预编译资源模块,因此构建速度更快。使用示例如下:
新增webpack.dll.js
1 | // webpack.dll.js |
新增一条scripts
1 | { |
配置映射
1 | // webpack.config.js |
执行分包命令
1 | npm run dll |
引入分包文件
1 |
|
缓存
提升二次构建速度。
babel-loader
开启缓存
1 | // webpack.config.js |
更多官网
terser-webpack-plugin
开启缓存
1 | // webpack.config.js |
更多官网
使用hard-source-webpack-plugin
1 | // webpack.config.js |
缩小构建目标
exclude 与 include 的使用,示例如下:
1 | // webpack.config.js |
减少文件搜索范围
- 优化 resolve.modules 配置(减少模块搜索层级)
- 优化 resolve.mainFields 配置
- 优化 resolve.extensions 配置
- 合理使用 alias
1 | // webpack.config.js |
使用 Tree Shaking 擦除无用的 JS 和 CSS
使用 Tree Shaking 擦除无用的 JS,见之前文章webpack 进阶用法一,本文讲下对 CSS 的处理。
1 | // webpack.config.js |
图片压缩
使用基于 Node 库的imagemin
实现的image-webpack-loader
。
1 | // webpack.config.js |
使用动态 Polyfill 服务
原理:识别 User Agent,下发不同的 Polyfill。
polyfill.io 官方提供的服务
1 | <script src="https://polyfill.io/v3/polyfill.js"></script> |
基于官方自建 polyfill 服务
1 | //huayang.qq.com/polyfill_service/v2/polyfill.min.js?unknown=polyfill&features=Promise,Map,Set |
参考
《极客时间》