记一次vue-cli老项目的打包时长优化

embedded/2024/10/9 5:20:25/

记一次vue-cli老项目的打包时长优化

背景

这是一个基于 vue-clivue2 的老项目,比较久远,一般Jenkins中打包时间都在 5-6min 左右,基本能够接受。

近来由于项目原因,在该项目中加入了一些在打包时动态生成的js文件以做“缓存”。

症状

于是打包时间开始暴涨,从刚开始生成的文件不多,打包时间暴涨到30min,然后生成的文件越来越多,打包时间竟然达到40min,这显然是不可接受的。

接下来是我的排查过程:

排查

首先排除了使用vite的可能性,迁移的成本太高,时间太短,长期解决方案可以考虑直接迁移到vite

首先找到具体卡住的时间

既然是从加入生成的js文件开始暴涨的打包时间,那么问题肯定优先出现在这里。

果然,我从 Jenkins 的打包日志中找到了证据。

有大量的类似警告如下:

1d41727678004.js as it exceeds the max of 500KB.

说明生成的js文件过大。

同时我还发现了在构建产物中有 .map 文件,这也是一个优化的方向。

既然文件过大,当然首选解决方案肯定是减小文件体积,但是这个文件是由打包时脚本生成,不便操作,遂放弃。

其次排查构建配置

首先打开 vue.config.js 文件,加上排除 .map 文件的选项。

javascript">productionSourceMap: false

进入 vue.config.js 的官网说明:https://cli.vuejs.org/zh/config/

我找到了如下三个相关选项:

productionSourceMap

Type: boolean

Default: true

如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。

runtimeCompiler

Type: boolean

Default: false

是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。

parallel

Type: boolean

Default: require('os').cpus().length > 1

是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。

最终修改

最终我在vue.config.js中加入了一下选项:

javascript">{parallel: true, // 多核处理,按理说默认应该生效,但我的文件被设置成了falseruntimeCompiler: false, // 当然这是默认值,但我的文件被设置成了trueproductionSourceMap: false // 不需要生产环境的 source map
}

结果

最终打包时间降到了12min左右,初见成效。

下一步时间足够的话,当然优先考虑迁移到vite,同时,减少生成的文件体积也是一个重要的优化项。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。


http://www.ppmy.cn/embedded/124296.html

相关文章

idear 控制台乱码、查询结果、参数、控制台乱码

一、 -Dfile.encodingUTF-8 二、 三、 四、 五、

滚雪球学MySQL[2.3讲]:MySQL数据过滤与排序详解:WHERE条件、ORDER BY排序与LIMIT分页查询

全文目录: 前言2.3 数据过滤与排序1. WHERE 条件语句基本语法示例1:筛选符合特定条件的数据示例2:使用LIKE进行模糊查询示例3:使用IN操作符示例4:使用AND与OR组合条件示例5:范围查询 2. ORDER BY 排序基本语…

基于GitLab 的持续集成环境

一.技术基础 Gitlab: 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务 GitRunner:用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用,GitLab CI是GitLab随附的开源持续集成服务&…

陀螺仪LSM6DSV16X与AI集成(14)----上报匿名上位机

陀螺仪LSM6DSV16X与AI集成.14--上报匿名上位机 概述视频教学样品申请源码下载硬件准备上位机通讯陀螺仪工作方式欧拉角数据的转换数据帧填充校验和计算数据发送演示开启INT中断中断读取传感器数据主程序演示 概述 本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协…

(十八)、登陆 k8s 的 kubernetes-dashboard 更多可视化工具

文章目录 1、回顾 k8s 的安装2、确认 k8s 运行状态3、通过 token 登陆3.1、使用现有的用户登陆3.2、新加用户登陆 4、k8s 可视化工具 1、回顾 k8s 的安装 Mac 安装k8s 2、确认 k8s 运行状态 kubectl proxy kubectl cluster-info kubectl get pods -n kubernetes-dashboard3、…

Rspamd:开源垃圾邮件过滤系统

Rspamd 是一个开源垃圾邮件过滤和电子邮件处理框架,旨在根据各种规则评估消息,包括正则表达式、统计分析以及与 URL 黑名单等自定义服务的集成。 系统会分析每封邮件并做出判定,MTA可据此采取进一步行动,例如拒绝邮件或添加垃圾邮…

Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) (A-E3)

写在前面 阳间比赛时间总出不太能做的阴间题 印尼的场,final round质量也还ok,算是学了两个经典trick吧 题目 A. Meaning Mean 排个降序后从小的开始合就好了,直觉上是哈夫曼树的合并方式, 但是只固定了第一个,后…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…