宝哥软件园

浅谈HMR在网络包多页应用中的干扰问题

编辑:宝哥软件园 来源:互联网 时间:2021-08-25

引起

公司搭建了一套webpack多页应用脚手架,刚开始很酷,解决了使用Vue进行模块化开发和多页打包在线管理的初衷。但是,随着业务项目的增加,我发现当npm运行dev时,每次热加载时,webpack的响应都很慢。

它基本上会卡住

94%资产优化95%排放是一个漫长的步骤

准备查明问题的原因。因为项目是基于vue-cli重写的多页应用脚手架,手动重写了HtmlWebpackPlugin插件,基本猜测与此有关,事实证明这确实是造成的。

我们可以在package.json中启动dev时添加- profile命令来查看启动的细节。

我们可以看到,资产优化的过程大约需要2s,有时会更长,所以基本可以确定这个地方被HMR卡住了。

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

优化思路-1

第一个想法是在开发过程中添加参数或手动更改配置,并且只为当前开发的项目加载模块。

更改webpack配置是一个相对直接的解决方案,比如配置当前启动的目录(构建页面),判断何时新增htmlWebPackPlugin。

在第二个方案中,您还可以手工编写webpack-dev-server。

在旧版本中,dev-server位于构建目录下,这便于更改和重写。但是,新版本是node_modules中加载的模块。

重写的话需要自己做一套东西,加上参数来判断。我还没有时间尝试它。如果有人有时间,你可以试着提高HMR的效率。

实践证明,第一种方案确实可以提高HMR的速度。但是,由于项目是多人共同开发和维护的,每个开发人员都很容易更改自己的配置配置,这可能会导致提交svngit时发生冲突或忘记修改配置。因此,除了个人维护项目,不建议这样做。

优化思路-2

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

看了一些参考资料,发现可以用现有的造轮子的方法,就是[html-web pack-plugin-for-multi-html](https://github.com/daifee/html-webpack-plugin-for-multihtml)

在这个插件中,相关变量在webpack done hook函数中设置,以确保原始html-webpack-plugin插件中的emit只触发所有进程一次。达到加速的效果。升级后,副本被修改,HMR的速度从原来的秒级变为毫秒级。

可以看出,资产优化已经优化到毫秒级。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+