- 更新到最新版本
- 将 loader 应用于最少数量的必要模块
- 引导(bootstrap)
- 每个额外的 loader/plugin 都有其启动时间。尽量少地使用工具
- 提高解析速度
- 减少 resolve.modules,resolve.extensions,resolve.mainFiles,resolve.descriptionFiles 中条目数量,因为他们会增加文件系统调用的次数
- 如果不使用 symlinks (例如 npm link 或者 yarn link),可以设置 resolve.symlinks: false
- 如果使用自定义 resolve.plugin 规则,并且没有指定 context 上下文,可以设置 resolve.cacheWithContext: false
- 减少编译结果的整体大小,以提高构建性能。尽量保持 chunk 体积小
- 使用数量/体积更小的 library
- 在多页面应用程序中使用 SplitChunksPlugin,并开启 async 模式
- 移除未引用代码
- 只编译当前正在开发的代码
使用持久化缓存
- 在 webpack 配置中使用 cache 选项。使用 package.json 中的 “postinstall” 清除缓存目录
- 将 cache 类型设置为内存或者文件系统。memory 选项很简单,它告诉 webpack 在内存中存储缓存,不允许额外的配置
module.exports = {
// ...
cache: {
type: 'memory'
}
}
自定义 plugin/loader 的时候要分析性能问题
- 将 ProgressPlugin 从 webpack 中删除,可以缩短构建时间。请注意,ProgressPlugin 可能不会为快速构建提供太多的价值,因此要权衡利弊再使用
- 使用 DllPlugin 为更改不频繁的代码生成单独的编译结果。这可以提高应用程序的编译速度,尽管它增加了构建过程的复杂度。
- 多线程打包
- 使用 thread-loader 将非常消耗资源的 loader 分流给一个 worker pool