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

 更新时间:2019年04月24日 11:54:00   作者:朝阳银枪小霸王  
这篇文章主要介绍了浅谈Webpack多页应用HMR卡住问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

起因

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

基本会卡在

94% assets optimization95% emitting

这个步骤很久

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

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

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

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

优化思路-1

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

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

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

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

重写的话需要自己把这个东东搞一套,加入参数进行判断处理,本人还没有时间进行尝试,如果有人有时间的可以试试能否改善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的速度从原来的秒级改为毫秒级。

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

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

相关文章

  • bootstrapValidator自定验证方法写法

    bootstrapValidator自定验证方法写法

    这篇文章主要为大家详细介绍了bootstrapValidator自定验证方法写法,研究bootstrapValidator验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • jquery 实现输入邮箱时自动补全下拉提示功能

    jquery 实现输入邮箱时自动补全下拉提示功能

    大家在做Web项目,都会有注册登录模块,如果是邮箱注册,想要在输入@后触发下拉框显示各个邮箱的功能。下面介绍一款jQuery实现输入邮箱的时候,可自动补全邮箱地址,也可称为是“输入提示”的功能,比如输入aaa时,自动变成aaa@163.com,有效提升网页的人性化体验
    2015-10-10
  • JS解决position:sticky的兼容性问题的方法

    JS解决position:sticky的兼容性问题的方法

    本篇文章主要介绍了JS解决position:sticky的兼容性问题的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • uniapp封装axios的详细过程(大可不必那么麻烦)

    uniapp封装axios的详细过程(大可不必那么麻烦)

    在uniapp中使用axios进行请求时,uniapp无法使用axios的适配器,下面这篇文章主要给大家介绍了关于uniapp封装axios的详细过程,需要的朋友可以参考下
    2022-10-10
  • JavaScript学习笔记(十)

    JavaScript学习笔记(十)

    今天学习的是window对象,还是有点用的。
    2010-01-01
  • javascript css styleFloat和cssFloat

    javascript css styleFloat和cssFloat

    在写js操作css的过程中发现float属性在IE和firefox下对应的js脚本是不一样的,IE下对应得是 styleFloat,firefox,chorme,safari下对应的是cssFloat,可用in运算符去检测style是否包含此属性。
    2010-03-03
  • 简化版手机端照片预览组件

    简化版手机端照片预览组件

    这篇文章主要介绍了简化版手机端照片预览组件的相关资料,需要的朋友可以参考下
    2015-04-04
  • 微信小程序 数据缓存实现方法详解

    微信小程序 数据缓存实现方法详解

    这篇文章主要介绍了微信小程序 数据缓存实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • javascript中this做事件参数相关问题解答

    javascript中this做事件参数相关问题解答

    有关this想必大家早有所耳闻,只不过在使用中不是那么在意而已,接下来为大家介绍下this做事件参数问题,感兴趣的你可不要错过了哈
    2013-03-03
  • echarts实现词云自定义形状的示例代码

    echarts实现词云自定义形状的示例代码

    这篇文章主要介绍了echarts实现词云自定义形状的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02

最新评论