浅谈webpack性能榨汁机(打包速度优化)


Posted in Javascript onJanuary 09, 2019

最近对项目的本地开发环境进行了打包速度优化,原有项目,网上能搜到的优化方案基本都加了,在16年低配mac pro 上打包时间为25秒多,但我发现细节做一些调整可能大大降低打包时间,最终优化到7秒多

dll

原有项目是线上和本地公用一套dll配置,因为antd这类ui库需要按需加载所以不能放到dll中,这时可以单独写一个dll配置,将所有第三方库添加到dll中。

这时因为.babelrc中添加了babel-plugin-import插件会导致优化不生效,所以需要对开发环境单独配置babel

浅谈webpack性能榨汁机(打包速度优化)

options的babelrc设置为false,然后重写一份babel配置,一定不要添加“import”插件

一个新问题,因为没有import插件,导致所有antd组件样式丢失。这时我在index-template.html中加入一行注释<!-- local-style -->,在本地打包时将其替换为antd相应版本在cdn上的css文件

浅谈webpack性能榨汁机(打包速度优化)

缓存

cache-loader专治花里胡哨!虽然你能在webpack的配置里找到n种缓存设置,但我发现cache-loader可以替代其它选项,它会在你的项目中创建一个 .cache-loader的文件夹,里面存放缓存文件,因为是直接写入硬盘,所以第一次打包的时候会多消耗几秒

babel-loader & 多线程

上面的图中可以看到我将babel-loader升级到8+,新的preset和plugin都有了命名上的变化。preset-env是用来替代以前201X的,通过targets可以指定目标代码(编译后代码)的版本,因为是本地开发,可以指定到chrome的高版本,这样很多新语法都不需要转换,可以节省一点时间(打包速度在10秒以下之后减一秒都是10%的提升啊!)不过这个方案要慎重使用,因为会造成线上本地环境不统一,难保不出现什么神奇的bug

拔掉HappyPack提升性能

在测试的过程中我发现一个神奇的事情,就是HappyPack反倒会降低打包时间,我经过反复测试,似乎babel-loader8+自带了多线程优化,所以HappyPack已经没用了(反而因为线程通信造成了资源浪费)。babel-loader8+的cpu使用率以及打包时间和babel-loader6+加HappyPack是相差不多的,但我在google上搜索时并没有看到有人提及此事,官网也没看到有个说明(管他那么多呢,能提升速度就行啦!)

后续计划

这个项目是两个人迭代一年份的代码量,按照上面的配置大部分项目应该都可以优化到10秒左右的速度(看项目大小,20秒以下应该都是正常的),还有一些小的优化细节对性能影响不大所以忽略掉了。目前webpack还是3+版本,因为4的一些变化担心影响过大,暂时没升级,升级之后应该还会有一些小提速
这7秒还不是最终的速度,我估计5秒应该没啥问题,后面再想优化就需要脑洞大开了

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

Javascript 相关文章推荐
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
Extjs单独定义各组件的实例代码
Jun 25 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
老司机带你解读jQuery插件开发流程
May 16 Javascript
jQuery的deferred对象使用详解
Sep 25 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
Aug 20 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
Mar 29 Javascript
layui清空,重置表单数据的实例
Sep 12 Javascript
Node.js的进程管理的深入理解
Jan 09 #Javascript
从vue源码看props的用法
Jan 09 #Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 #Javascript
vue-cli2 构建速度优化的实现方法
Jan 08 #Javascript
一个因@click.stop引发的bug的解决
Jan 08 #Javascript
JavaScript学习笔记之图片库案例分析
Jan 08 #Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 #Javascript
You might like
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
Python实现备份文件实例
2014/09/16 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
Python中按键来获取指定的值
2019/03/02 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
大学四年规划书范文
2013/12/27 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
手机被没收的检讨书
2014/10/04 职场文书
周年庆典答谢词
2015/01/20 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书