优化构建速度
- 优化构建速度 【提升打包速度】
分析影响打包速度环节
- 1、找到入口文件,分析内容
- 优化解析时间
- 2、找出所有模块依赖, 拿到依赖路径,转换代码
- 优化搜索时间
- 3、把所有的依赖模块输出源代码,把bundle.js输出到
dist目录中- 把源代码进行压缩,通常 webpack 需要卡好一会,这是因为压缩 JS 需要先将代码解析成 AST 语法树,然后需要根据复杂的规则去分析和处理 AST,最后将 AST 还原成 JS,这个过程涉及到大量计算,因此比较耗时,打包就容易卡住。
- 优化压缩时间。
优化解析时间 / 优化压缩时间 (开启多进程)
- webpack5内置terser-webpack-plugin插件,默认是启动多进程并行的,可以多进程执行代码压缩、提高构建速度,
- thread-loader : 多进程方式运行资源加载
优化搜索时间
缩小文件搜索范围,减少不必要的编译工作)
- 优化 loader 配置
- 优化 resolve.modules 配置
- 优化 resolve.alias 配置
- 缩小搜索范围:指定 Webpack 只搜索特定的文件夹和文件,而不是整个项目。
- 使用缓存:在每次构建之间使用缓存可以显著缩短搜索时间
- 优化文件监听:文件监听是 Webpack 用来检测文件变化的机制。使用 webpack-dev-server 或 watch-mode 时,可以通过优化文件监听来加快搜索时间
优化二次打包时间 (利用缓存)
- 持久化缓存提高构建速度
持续化构建过程来说,第一次构建是一次全量构建,然后它会将相关产物序列化缓存在磁盘中(serialize)。后续构建具体流程可以依赖于上一次的缓存进行:读取磁盘缓存 -> 校验模块 -> 解封模块内容
-
在webpack5之前,一般会使用cache-loader将编译结构写入磁盘缓存,或者使用babel-loader?cacheDirectory=true,设置babel编译的结果写进磁盘缓存。
-
webpack5新增的cache属性,会默认开启磁盘缓存【memory】,默认将编译结果缓存在 node_modules/.cache/webpack目录下。
-
当设置 cache.type: "filesystem" 时,webpack 会在内部以分层方式启用文件系统缓存和内存缓存。 从缓存读取时,会先查看内存缓存,如果内存缓存未找到,则降级到文件系统缓存。 写入缓存将同时写入内存缓存和文件系统缓存。
wepback5开启缓存【持久化缓存】
module.exports = {
// 持久化缓存配置
cache: {
// 将缓存类型设置为文件系统,默认是memory
type: 'filesystem',
buildDependencies: {
// 更改配置文件时,重新缓存
config: [__filename]
}
},
optimization: {
// 值为"single"会创建一个在所有生成chunk之间共享的运行时文件
runtimeChunk: 'single',
moduleIds: 'deterministic',
},
}
esbuild-loader提升构建速度
esbuild-loader是一个 Webpack 的 loader,可以使用esbuild作为 JavaScript 构建工具来加速构建速度esbuild是一个高性能的 JavaScript 构建工具,可以快速地处理 JavaScript 和 TypeScript 代码- 可以使用esbuild-loader替换babel-loader、ts-loader
可处理tsx/typescript/jsx/javascript 代码
esbuild-loader 可以自动检测 tsconfig.json文件
module.exports = {
module: {
rules:[
test: /\.js$/, // /\.tsx?$/、/\.js$/
loader: 'esbuild-loader',
options: {
loader: 'jsx', // tsx、jsx
target: 'es2015'
}
]
}
}
tree Shaking
- 可以去除未使用的模块