webpack性能优化简要

简介: webpack性能优化简要

3.jpg

1.优化loader的查找范围


  1. test:

匹配特定条件。一般是提供一个正则表达式或正则表达式的数组,但这不是强制的

  1. include(推荐):

匹配特定条件。一般是提供一个字符串或者字符串数组,但这不是强制的

  1. exclude(**优先级最高): **

排除特定条件。一般是提供一个字符串或字符串数组,但这不是强制的

{
  test: /\.css$/,
  include: [
    path.resolve(__dirname, "app/styles"),
    path.resolve(__dirname, "vendor/styles")
  ]
}

优化方案

通过缩小模块的查找范围来减少查找时间


2.优化第三方模块的查找范围



  1. resolve.modules

解析模块时应该搜索的目录

module.exports={
  resolve:{
    modules: [path.resolve(__dirname, "./node_modules")]
  }
}

优化方案

通过指定解析模块的搜索目录来屏蔽调module向上查找增加的的耗时


3.优化导入模块目录层级多增加的耗时


  1. resolve.alias

通过配置别名来确保模块引入变得更简单

resolve: {
   alias: {
     "@": path.join(__dirname, "./pages"),
     "@assets": path.resolve(__dirname, "../src/images/"),
   },
},

优化方案:

通过使用别名(指明了目录/文件)来导入模块使得模块的递归解析时间缩短


4.优化导入模块未指明后缀增加的耗时


resolve.extensions

此配置在用户导入模块不携带后缀时会根据配置项中的后缀进行匹配查找

// v5.25.1版本默认值
extensions: [".js", ".json"]

优化方案
  1. 使用合理的后缀列表
  2. 导入模块时指明后缀


5.使用多线程thread-loader


配置到耗时的loader中使得耗时loader可以在线程池中运行


安装 thread-loader:
npm install --save-dev thread-loader
复制代码

用法:

把这个 loader 放置在其他 loader 之前, 放置在这个 loader 之后的 loader 就会在一个单独的 worker 池(worker pool)中运行


示例:
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        include: path.resolve("src"),
        use: [
          "thread-loader",
          "expensive-loader"
        ]
      }
    ]
  }
}


6.使用缓存优化babel-loader


babel-loader 提供了  cacheDirectory 配置给 Babel 编译时给定的⽬录,并且将⽤于缓存加载器的结 果,但是这个设置默认是 false 关闭的状态,我们需要设置为 true ,这样 babel-loader 将使⽤默认的 缓存⽬录 。


安装 babel-loader:

webpack 3.x | babel-loader 8.x | babel 7.x

npm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env webpack


webpack 3.x babel-loader 7.x | babel 6.x

npm install babel-loader babel-core babel-preset-env webpack
示例:
rules: [
  {
    test: /\.js$/,
    loader: 'babel-loader',
    options: {
      cacheDirectory: true
    },
  }
];


7.使用terser-webpack-plugin开启多线程和缓存


安装terser-webpack-plugin:
npm install terser-webpack-plugin --save-dev

示例:
const TerserPlugin = require('terser-webpack-plugin');
  module.exports = {
    optimization: {
      minimizer: [
        new TerserPlugin({
        cache: true, // 开启缓存
        parallel: true // 多线程
      })
    ]
  }
};


8.通过使用externals来减少依赖项> 防止将某些import的包打包到bundle中,而是在运行时去外部获取这些依赖


例如,从 CDN 引入 jQuery,而不是把它打包:index.html

<script
  src="https://code.jquery.com/jquery-3.1.0.js"
  integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
  crossorigin="anonymous">
</script>


webpack.config.js

externals: {
  jquery: 'jQuery'
}


依赖使用不变

import $ from 'jquery';
$('.my-element').animate(...);



相关文章
|
2月前
|
缓存 前端开发 JavaScript
Webpack技术深度解析:模块打包与性能优化
【10月更文挑战第13天】Webpack技术深度解析:模块打包与性能优化
|
7月前
|
缓存 资源调度 监控
Webpack 5新特性详解与性能优化实践
Webpack 5通过确定性的Chunk ID、模块ID和导出ID实现了长期缓存,这意味着相同的输入将始终产生相同的输出。这样,当你的用户再次访问更新后的网站时,浏览器可以重用旧的缓存,而不是重新下载所有资源。
92 2
|
7月前
|
缓存 监控 JavaScript
《Webpack5 核心原理与应用实践》学习笔记-> webpack极致性能优化
《Webpack5 核心原理与应用实践》学习笔记-> webpack极致性能优化
87 1
|
7月前
|
监控 IDE 开发工具
《Webpack5 核心原理与应用实践》学习笔记-> webpack性能优化技巧
《Webpack5 核心原理与应用实践》学习笔记-> webpack性能优化技巧
129 0
|
缓存 前端开发 JavaScript
webpack性能优化
webpack 性能优化
|
缓存 前端开发 数据可视化
Webpack4 性能优化实践 #108
Webpack4 性能优化实践 #108
115 0
|
缓存 Dart 前端开发
webpack 性能优化方案
`webpack` 作为前端目前使用最广泛的打包工具,在面试中也是经常会被问到的。 比较常见的面试题包括: - 可以配置哪些属性来进行 **`webpack` 性能优化?** - **前端有哪些常见的性能优化?**(除了其他常见的,也完全可以从 `webpack` 来回答) `webpack` 的性能优化比较多,我们可以对其进行分类: 1. **打包后的结果**,上线时的性能优化。(比如分包处理、减小包体积、CDN服务器等) 2. **优化打包速度**,开发或者构建时优化打包速度。(比如 `exclude`、`cache-loader` 等) 大多数情况下,我们会更加侧重于 **第一种
webpack 性能优化方案
|
前端开发 JavaScript 应用服务中间件
【前端】性能优化——webpack 打包压缩
【前端】性能优化——webpack 打包压缩
269 0
|
JavaScript 区块链
项目性能优化之用url-loader把小图片转base64,大图片使用image-webpack-loader压缩
项目性能优化之用url-loader把小图片转base64,大图片使用image-webpack-loader压缩
367 0
|
JavaScript 前端开发 应用服务中间件
项目性能优化之用compression-webpack-plugin插件开启gzip压缩,以vue为例
项目性能优化之用compression-webpack-plugin插件开启gzip压缩,以vue为例
750 0
下一篇
DataWorks