详解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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
单击按钮显示隐藏子菜单经典案例
Jan 04 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
js实现非常简单的焦点图切换特效实例
May 07 Javascript
Jquery常用的方法汇总
Sep 01 Javascript
jQuery获取及设置表单input各种类型值的方法小结
May 24 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
Mar 06 Javascript
微信小程序表单弹窗实例
Jul 19 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
Jan 04 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
Mar 04 Javascript
react-router-dom 嵌套路由的实现
May 02 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
Python实现身份证号码解析
2015/09/01 Python
python学习教程之使用py2exe打包
2017/09/24 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
linux面试相关问题
2012/08/11 面试题
灵泰克Java笔试题
2016/01/09 面试题
高中生班主任评语
2014/04/25 职场文书
团队精神的演讲稿
2014/05/14 职场文书
2015国庆节宣传语
2015/07/14 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
springboot实现string转json json里面带数组
2022/06/16 Java/Android