浅谈Webpack多页应用HMR卡住问题


Posted in Javascript onApril 24, 2019

起因

在公司搭建了套webpack多页面应用脚手架,开始用着很爽,解决了既想使用Vue的模块化开发,又想做多页打包上线管理的初衷,但是随着业务项目的增加,我发现npm run dev的时候,每次热加载,webpack的反应都很慢。

基本会卡在

94% assets optimization95% emitting

这个步骤很久

准备具体定位一下问题的原因。由于项目基于vue-cli改写的多页应用脚手架,手动重写了HtmlWebpackPlugin插件,所以基本猜测和这个有关,后来证明也真的是这个引起的。

我们可以在package.json中启动dev的时候添加--profile命令,去看启动的详情。

浅谈Webpack多页应用HMR卡住问题

我们可以看到,asset optimization过程耗时2s左右,有时候会更长,所以基本确定就是这个地方卡住了HMR。

那么问题来了,怎么优化这里?

优化思路-1

第一想法是,在dev的时候,加入参数或手动更改config,只针对当前开发的项目进行模块的加载。

更改webpack配置是比较直接的方案,比如把当前启动的目录配置好(buildingPage), new HtmlWEbpackPlugin的时候进行判断即可。

浅谈Webpack多页应用HMR卡住问题

第二个方案,当然也可以手写webpack-dev-server。

dev-server这个在老版本是在build目录下面的,比较方便改动重写,然而新的版本,是在node_modules中的已经加载的模块,

浅谈Webpack多页应用HMR卡住问题

重写的话需要自己把这个东东搞一套,加入参数进行判断处理,本人还没有时间进行尝试,如果有人有时间的可以试试能否改善HMR效率。

实践证明第一个方案确实会提高HMR速度,但由于项目是多人共同开发和维护,每个开发者更改自己的config配置,极容易造成提交svn\git冲突,或忘记修改config等状况,所以除了个人维护的项目,并不建议这么做。

优化思路-2

其实这个问题的具体原因就是改为多入口之后,在HtmlWebpackPlugin中会对每一个入口文件都执行一遍emit中所有代码逻辑,正是这个原因影响了速度。

在看一些参考资料之后,我发现已经有现有的造轮子可以使用了,就是 [html-webpack-plugin-for-multihtml] (https://github.com/daifee/html-webpack-plugin-for-multihtml)

该插件通过在webpack done钩子函数中设置相关变量,来保证原html-webpack-plugin插件中emit仅触发一次全部流程。来达到提速的效果。升级以后,修改文案,HMR的速度从原来的秒级改为毫秒级。

浅谈Webpack多页应用HMR卡住问题

可以看出 asset optimization已经优化到毫秒级。

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

Javascript 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
五个jQuery图片画廊插件 推荐
May 12 Javascript
jQuery选择器源码解读(二):select方法
Mar 31 Javascript
jquery判断当前浏览器的实现代码
Nov 07 Javascript
jquery实现左右无缝轮播图
Jul 31 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
Aug 23 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
Sep 29 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 Javascript
原生js实现碰撞检测
Mar 12 Javascript
Vue基本指令实例图文讲解
Feb 25 Vue.js
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 #Javascript
vue模仿网易云音乐的单页面应用
Apr 24 #Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 #Javascript
详解关于webpack多入口热加载很慢的原因
Apr 24 #Javascript
微信小程序实现的一键连接wifi功能示例
Apr 24 #Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 #Javascript
js实现全选反选不选功能代码详解
Apr 24 #Javascript
You might like
php部分常见问题总结
2008/03/27 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
node实现简单的反向代理服务器
2017/07/26 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
python 实时遍历日志文件
2016/04/12 Python
Python 专题四 文件基础知识
2017/03/20 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
警察思想汇报
2014/01/04 职场文书
开业庆典答谢词
2014/01/18 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
竞选村长演讲稿
2014/04/28 职场文书
精神文明单位申报材料
2014/05/02 职场文书
会计系毕业求职信
2014/08/07 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
中标通知书
2015/04/17 职场文书
冲出亚马逊观后感
2015/06/03 职场文书