浅谈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 相关文章推荐
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
JS中 用户登录系统的解决办法
Apr 15 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
我的Node.js学习之路(二)NPM模块管理
Jul 06 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
Dec 31 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 Javascript
vue项目中微信登录的实现操作
Sep 08 Javascript
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
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日历程序
2006/12/06 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PDO::query讲解
2019/01/29 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
python获取远程图片大小和尺寸的方法
2015/03/26 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Django 用户认证组件使用详解
2019/07/23 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
信访维稳承诺书
2015/05/04 职场文书
2015大一新生军训感言
2015/08/01 职场文书
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL