详解webpack 热更新优化


Posted in Javascript onSeptember 13, 2018

前言

随着项目的界面越来越多,webpack的热更新越来越慢,有时会达到5,7s之久,这对于开发效率影响是非常巨大的。

分析过程

于是今天就针对这个分析了一下热更新慢的原因,步骤如下

首先先在package中的启动命令加上

--progress --watch --colors --profile

先解释一下这几个参数的含义

  • --progress 构建进度
  • --watch 实时监测
  • --profile 编译过程中的步骤耗时时间

加上了这几个参数,重启项目,就可以开始观察耗时时间了,修改了某个文件之后,查看控制台,如下

详解webpack 热更新优化

图中红色部分就是耗时最长的地方了,好了,发现了耗时时间长的地方了,经过百度搜索,发现也有个问题和我这个非常类似,他的原因是因为使用了uglifyJsPlugin插件,这么一想,我的项目中的webpack配置中也用到了这个插件,于是把这个插件移到生产环境中使用,修改之后重启项目,修改某个文件之后,查看控制台,如下

详解webpack 热更新优化

效果非常惊人,总的耗时已经在1,2s之内了,效率提高了不少!!如果也有这种烦恼的小伙伴也可以试一下哦

另一种解决方案

这种方案的思路为,开发环境中,每人负责的都是一部分模块或者组件,所以热更新可以只编译自己当前需要的页面,而没必要把所有的页面全部编译。创建一个 selfConfig.js 设置需要保存的页面,然后在 webpack 配置中,配置,只属于需要的页面去编译热更新。加快开发环境中的编译速度。

// selfConfig.js
module.exports = [
'imScence',
'mLogin'
];
// webpack.base.conf.js 
// 部分关键代码
const selfConfig = require("./selfConfig");

for (let moduleName of modules) {
if (selfConfig.length === 0) {
devEntries[moduleName] = path.join(resolve('src'), 'modules', moduleName, 'main.js');
} else {
if (selfConfig.includes(moduleName)) {
devEntries[moduleName] = path.join(resolve('src'), 'modules', moduleName, 'main.js');
}
}
buildEntries[moduleName] = path.join(resolve('src'), 'modules', moduleName, 'main.js');
}

以上事例设置完成后,只会热更新两个页面,但是这种方案的弊端是,其他页面本地环境将是白屏打不开(因为压根没编译),所以这种方案还是根据适合自己的场景使用。

注意: 每次修改 selfConfig.js 需要重起 webpack 服务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
JavaScript中的eval()函数使用介绍
Dec 31 Javascript
javascript中加var和不加var的区别 你真的懂吗
Jan 06 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
Nov 12 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
Jun 16 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
配置一个vue3.0项目的完整步骤
Apr 26 Javascript
一文了解vue-router之hash模式和history模式
May 31 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
ES6 解构赋值的原理及运用
May 25 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
Sep 13 #Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 #Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 #Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 #Javascript
mpvue中使用flyjs全局拦截的实现代码
Sep 13 #Javascript
AngularJS修改model值时,显示内容不变的实例
Sep 13 #Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 #Javascript
You might like
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
浅析php学习的路线图
2013/07/10 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
深入理解Python变量与常量
2016/06/02 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
numpy.where() 用法详解
2019/05/27 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
python实现人像动漫化的示例代码
2020/05/17 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
python操作redis数据库的三种方法
2020/09/10 Python
2015年清明节扫墓演讲稿
2015/03/18 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js