浅谈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 相关文章推荐
表单内同名元素的控制
Nov 22 Javascript
javascript常见数据验证插件大全
Aug 03 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
Dec 22 Javascript
Javascript字符串常用方法详解
Jul 21 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
jQuery给表格添加分页效果
Mar 02 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 Javascript
微信小程序3种位置API的使用方法详解
Aug 05 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
小程序实现日历左右滑动效果
Oct 21 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 Javascript
微信小程序实现跳转的几种方式总结(推荐)
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
DedeCms模板安装/制作概述
2007/03/11 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
Open and Print a Word Document
2007/06/15 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Python回调函数用法实例详解
2015/07/02 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python 容器总结整理
2017/04/04 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
python画双y轴图像的示例代码
2019/07/07 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
院药学专业个人求职信
2013/09/21 职场文书
酒店管理专业学生求职信
2013/09/27 职场文书
室内拓展活动方案
2014/02/13 职场文书
班级旅游计划书
2014/05/03 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书