浅谈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 动态扩展对象之另类视角
May 25 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
Nov 20 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
Aug 05 Javascript
AngularJS 霸道的过滤器小结
Apr 26 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
Jul 05 Javascript
JavaScript与Java正则表达式写法的区别介绍
Aug 15 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 Javascript
vue路由结构可设一层方便动态添加路由操作
Aug 31 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开发过程中关于继承的使用方法分享
2011/06/17 PHP
PHP安全防范技巧分享
2011/11/03 PHP
php 类自动载入的方法
2015/06/03 PHP
PHP实现搜索相似图片
2015/09/22 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
PHP静态成员变量
2017/02/14 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
python3爬取各类天气信息
2018/02/24 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
浅析Python中字符串的intern机制
2020/10/03 Python
大专会计自我鉴定
2014/02/06 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
企业2014年度工作总结
2014/12/10 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
烈士陵园观后感
2015/06/08 职场文书
Python 多线程处理任务实例
2021/11/07 Python
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏