通过使用插件和配置插件的参数。

1. 打包速度分析

首先通过speed-measure-webpack-plugin分析打包的各个插件和loader的耗时。然后具体问题,具体分析。

按照插件

npm install --save-dev speed-measure-webpack-plugin

使用时该插件需要将整个配置对象包裹

const SpeedMeasureWebpackPlugin = require('speed-measure-webpack-plugin');

const smp = new SpeedMeasureWebpackPlugin();

module.exports = smp.wrap(smart(base, {
//...
}));

2 启动js压缩插件的并行和缓存配置

webpack中对js进行压缩的插件是terser-webpack-plugin。

const TerserWebpackPlugin = require('terser-webpack-plugin');
optimization: {
minimizer: [
new TerserWebpackPlugin({
parallel: true, // 启用并行压缩
cache: true, // 启用缓存
})
]
}

3.合理使用hash值修改文件名

首先,了解三种hash的概念

1. hash
每次编译生成一个hash值。如果所有的文件都无变化,则hash值不变;如果有任何一个文件发生变化,hash值改变。所有的使用hash的文件名,hash值相同。
2. chunkhash
针对入口文件相关的模块的hash变化,如果入口对应的模块发生变化,hash值改变,为改变的入口依赖模块,hash不变。每个文件的hash不同。
3. contenthash
按照内容生成hash值。

为了更好的使用缓存,使用contenthash值。

❎当开发模式下,设置devServer的hot:true时,默认调用webpack.HotModuleReplacementPlugin插件。此时不允许使用[contenthash],可以使用[hash]。

// output中使用contenthash
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].[contenthash].js', //name是入口对应的key,无可以,默认main
}
// css文件的contenthash
new MiniCssExtractPlugin({
filename: '[name].[contenthash].css',
})

4. module.noParse

对于引入的大型第三方库,不需要将其解析成语法树来解析依赖,提高构建速度。被定义在该配置中的模块中,不能调用import/require/define等引入机制。

  module: {
noParse: /lodash|jquery/,

5. 动态链接库dll

可以极大的提高打包/编译速度。

1. 生成dll文件

首先使用DllPlugin生成一个dll文件,需要配置一个单独的webpack.dll.config.js文件

const path = require('path');
const webpack = require('webpack'); module.exports = {
mode: 'none',
entry: {
react: ['react', 'react-dom']
},
output: {
filename: '[name].dll.js',
path: path.join(__dirname, 'dist'),
library: '_dll_[name]',
},
plugins: [
new webpack.DllPlugin({
name: '_dll_[name]',// 名字必须和outputli.brary一直
path: path.join(__dirname, 'manifest.json')
})
]
}

package.json中配置脚本命令,生成dll文件

  "scripts": {
"dll": "webpack --config webpack.dll.config.js"
}

2. 使用DllReferencePlugin配置mainfest映射

在webpack.config.js中添加插件

    new webpack.DllReferencePlugin({
// 建立索引
manifest: path.resolve(__dirname, 'manifest.json'),
}),
new CleanWebpackPlugin({
// 每次只清空非dll的文件,保留dll文件
cleanOnceBeforeBuildPatterns: ['**/*','!react.dll.js'],
}),

3. dll包引入html文件

devServer的contentBase设为./dist时,相对路径设置如下

<script src="../react.dll.js"></script>

webpack提高打包速度的更多相关文章

  1. vuecli中配置webpack加快打包速度

    webpack4中webpack 的DllPlugin插件可以将常见的库文件作为dll文件来,每次打包的时候就不用再次打包库文件了. 但是游鱼西在vuecli中已经去除这个选项,意识到带来的打包速度提 ...

  2. webpack打包速度和性能再次优化

    一. 改单dll为双dll 因为上图原因,使用CommonsChunkPlugin时,导致其打包出来的vendors.js内的模块ID会因为其他文件引用模块数量的变化而变化. 所以现利用DllPlug ...

  3. 深入浅出的webpack构建工具---DllPlugin DllReferencePlugin提高构建速度(七)

    阅读目录 一:什么是DllPlugin 和 DllReferencePlugin?作用是什么? 二:在项目中如何使用 DllPlugin 和 DllReferencePlugin? 三:DllPlug ...

  4. 如何在Gulp中提高Browserify的打包速度

    使用Browserify打包js时如果项目变得越来越大,编译时间就会相应变得越来越长.使用官方的插件watchify是个比较有效的提高速度方案. 提速原理 watchify的用法和gulp的watch ...

  5. 优化webpack打包速度方案

    基本原理要么不进行打包:要么缓存文件,不进行打包:要么加快打包速度. 不进行打包方案: 1,能够用CDN处理的用CDN处理,比如项目引入的第三方依赖jquery.js,百度编辑器 先进行打包或者缓存然 ...

  6. 解决webpack打包速度慢的解决办法

    技巧1 webpack在打包的时候第一次总是会做很长的准备工作,包括加载插件之类的.在刚接触webpack的时候总是webpack一下-测一下-改一下-再webpack一下,这种方式最后让很多人崩溃了 ...

  7. Vue.js中用webpack合并打包多个组件并实现按需加载

    对于现在前端插件的频繁更新,所以多多少少要对组件化有点了解,下面这篇文章主要给大家介绍了在Vue.js中用webpack合并打包多个组件并实现按需加载的相关资料,需要的朋友可以参考下.   前言 随着 ...

  8. 浅谈Webpack模块打包工具一

    为什么要使用模块打包工具 1.模块化开发ES Modules存在兼容性问题 打包之后成产阶段编译为ES5 解决兼容性问题 2.模块文件过多 网络请求频繁  开发阶段把散的模块打包成一个模块 解决网络请 ...

  9. webpack独立打包与缓存处理

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 先前写了一篇webpack入门的文章<webpack入门必知必会>,简单介绍了webpa ...

随机推荐

  1. matlab界面UI设计资料

    一个实现图像灰度处理并归类于某已知相似图片的程序 软件:matlab2017a 算法:HU检索图像算法.Zernike算法 资料: ①: matlab遍历文件夹下所有图片和遍历所有子文件夹下图片 - ...

  2. CF241E Flights 差分约束

    传送门 差分约束永远是Itst最烂的图论知识点没有之一qwq 先用dfs把在\(1\)到\(N\)的路径上的所有点都拿出来,其他的点和边状态任意都不会影响答案. 然后考虑设\(dis_i\)表示从\( ...

  3. Drool7s kmodule的作用--系列02课

    本文是介绍drool7s kmodule. 一.为什么komdule.xml文件一定要放在resources下的META-INF文件夹中 --->直接看源码吧,请看下图,应该都知道为什么要放在固 ...

  4. C#类型成员:方法

    一.方法 方法的基本结构:返回值 方法名(参数){ 内容 },其中无返回值时用void,有返回值时用返回值类型,参数可以是零到无限个,参数由参数类型和参数名组成. void Method1() { } ...

  5. JS前端加密JAVA后端解密详解

    最近有一个加解密的需求,其实没有什么难度,但是实践过程中踩了很多坑,把踩坑过程分享出来. 1.前端JS加密 /** * 加密(需要先加载aes.min.js文件) * @param word * @r ...

  6. oracle plsql基本语法

    oracle plsql 基本语法 --plsql默认规则:plsql赋值用":=" plsql判断用"=" plsql输入用"&" ...

  7. MySQL-By孙胜利-sifangku.com

    一.数据库基本概念 数据库:信息存储的仓库,包括一系列的关系措施! 表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表) 字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数 ...

  8. FlaskCBV视图类

    路由视图类 from flask import Flask app = Flask(name) 视图类 Views文件 看views源码 继承最后一个类 导入CBV的视图基类 from flask i ...

  9. 交换ESCHAUNGE英语ESCHAUNGE交易所

    exchange From Middle English eschaunge, borrowed from Anglo-Norman eschaunge exchange 1.An act of ex ...

  10. iOS学习——NSLog输出各种类型

    在开发过程中,在调试过程中经常打印不出自己想要的数据格式,还时常报警告,所以整理了一下iOS中用NSLog打印各种数据类型的样式.整型占位符说明 : %d : 十进制整数, 正数无符号, 负数有 “- ...