浅谈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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
Vue自定义指令拖拽功能示例
Feb 17 Javascript
详解vue组件开发脚手架
Jun 15 Javascript
jQuery阻止事件冒泡实例分析
Jul 03 jQuery
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
Nov 24 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
Dec 01 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
Feb 01 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
js控制table合并具体实现
2014/02/20 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
vue跨域解决方法
2017/10/15 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
python使用分治法实现求解最大值的方法
2015/05/12 Python
python的文件操作方法汇总
2017/11/10 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
python如何导入依赖包
2020/07/13 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
小区消防演习方案
2014/02/21 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
大学迎新生标语
2014/10/06 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS