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

devtools/2024/10/16 4:28:43/

记一次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/devtools/119679.html

相关文章

淘宝商品详情API接口多线程调用:解锁数据分析行业的效率新篇章

在数据分析行业,淘宝作为中国最大的在线购物平台,其商品详情数据具有极高的市场价值。然而,面对海量的数据,如何高效、稳定地获取这些数据,一直是数据分析师面临的重要挑战。本文将探讨如何通过多线程调用淘宝商品详情…

Python Web 与量子计算

Python Web 与量子计算 目录 ⚛️ 量子计算的基础🐍 使用 Python 调用量子计算🌐 实现量子算法的 Web 接口🛠️ 实战案例:量子计算在金融领域的应用 1. ⚛️ 量子计算的基础 量子计算是利用量子力学原理进行信息处理的一种新兴…

初识C语言(三)

感兴趣的朋友们可以留个关注,我们共同交流,相互促进学习。 文章目录 前言 八、函数 九、数组 (1)数组的定义 (2)数组的下标和使用 十、操作符 (1)算数操作符 (2&#xff…

ireport 5.1 中文生辟字显示不出来,生成PDF报字体找不到

ireport生成pdf里文字不显示。本文以宋体中文字不显示为例。 问题:由浅入深一步一步分析 问题1、预览正常,但生成pdf中文不显示 报告模板编辑后,预览正常,但生成pdf中文不显示。以下是试验过程: 先编辑好一个报告单模…

C语言扫盲

文章目录 C版本C语言特征GCCprintf数据类型函数指针内存管理void指针 Struct结构和Union结构typedef预处理器make工具cmake工具Projectintegral of sinc functionemulator embedded systeman event schedule 补充在线Linux终端安装Linux参考 建议还是国外教材学习…人家的PPT比…

Android常用C++特性之std::none_of

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::none_of 是 C 标准库中的一个算法,用于检查范围中的所有元素是否都不满足指定的条件。如果范围内的所有元素都不满足给定的条件,则返回 t…

【一文读懂】C#如何实现通用的排序功能

目录 通用排序功能 1.升序 2.降序 测试 1.测试代码 2.测试结果 本篇文章来分享一下C#如何实现通用的排序功能。在项目中经常会使用到排序的方法,那如何使排序方法更加通用呢?可以通过泛型,接口,委托来实现。 通用排序功能…

elasticsearch单个node节点写入数据

不设置用户名及密码的情况下,直接写入 我以为没有明确的设置就没有账号密码了,发现还是不行,竟然是非root的用户名,当初./bin/elasticsearch时创建的非sudo用户,elasticsearch 用户名(不是python虚拟环境的用户名),密码另外设置了,此时也是elasticsearch的密码,现在…