浅谈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 this用法小结
Dec 19 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
javascript中scrollTop详解
Apr 13 Javascript
jQuery实现的Div窗口震动效果实例
Aug 07 Javascript
seajs实现强制刷新本地缓存的方法分析
Oct 16 Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 Javascript
js操作二进制数据方法
Mar 03 Javascript
vue实现城市列表选择功能
Jul 16 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 Javascript
ES5新增数组的实现方法
May 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
商务日语专业自荐信
2014/04/17 职场文书
离婚协议书怎么写
2014/09/12 职场文书
教师自查自纠材料
2014/10/14 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
Python实现视频自动打码的示例代码
2022/04/08 Python
python实现手机推送 代码也就10行左右
2022/04/12 Python