详解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 相关文章推荐
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
Nov 25 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
Nov 26 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
Jul 30 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 Javascript
Node.js 回调函数实例详解
Jul 06 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
JavaScript创建防篡改对象的方法分析
Dec 30 Javascript
小程序如何写动态标签的实现方法
Feb 05 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
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
cakephp常见知识点汇总
2017/02/24 PHP
JS阻止用户多次提交示例代码
2014/03/26 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
vue点击当前路由高亮小案例
2019/09/26 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
Python基于动态规划算法计算单词距离
2015/07/25 Python
用Python写冒泡排序代码
2016/04/12 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
python实现超级玛丽游戏
2020/03/18 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
家佳咖啡店创业计划书
2013/12/27 职场文书
护士毕业生自荐信
2014/02/07 职场文书
电子商务专业求职信
2014/03/08 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
公司租房协议书
2014/10/14 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书