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

news2024/12/24 11:30:57

记一次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 文件的选项。

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中加入了一下选项:

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

结果

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2181104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SQL】笛卡尔积比较收入更高的员工

目录 语法 需求 示例 分析 代码 语法 FROM Employee a, Employee b 两个表之间笛卡尔积(Cartesian product)的形式,用了逗号分隔的连接(comma-separated join),这是早期SQL语法中用于连接表的一种方式…

从零开始学习OMNeT++系列第二弹——新建一个OMNeT++的工程

上一篇第一弹介绍了OMNeT是什么以及如何安装OMNeT,现在来说一下如何新建一个自己的OMNeT的工程。 在 Omnet安装完成后,samples/tictoc 中有该例子的完整文件,你可以立刻运行该文件看他是怎么工作的,不过更推荐按接下来的步骤一步…

[Notepad++] 文本编辑器的下载及详细安装使用过程(附有下载文件)

程序员常用的文本编辑器Notepad,用于修改配置文件等 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压文件,得到 双击exe文件 选择简体中文,点击OK 点击下一步 点击“我接受” 更改安装目录,不…

谷歌收录查询工具,如何选择适合自己的谷歌收录查询工具

搜索引擎优化(SEO)的实践中,了解网站在谷歌搜索引擎中的收录情况是一项至关重要的任务。这不仅能反映网站在谷歌搜索结果中的可见性,还能帮助SEO专业人士和网站所有者识别潜在的优化机会。 一、谷歌收录查询工具 1.GoogleSear…

通信工程学习:什么是CSMA/CA载波监听多路访问/冲突避免

CSMA/CA:载波监听多路访问/冲突避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance),即载波监听多路访问/冲突避免,是一种用于数据传输时避免各站点之间冲突的算法,尤其适用于无线局域网&…

基于springboot的评分评教管理系统

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的评分评教管理系统1拥有三种角色 管理员:评价管理、学生管理、评分指标管理、课程管理、教师管理、管理员管理等教师:课程管理、学生管理、个人信…

ubuntu server 常用配置

这里写目录标题 0001 虚拟机静态IP0002 vim tab 4个空格0003 设置时区0004 网络端口查看端口开放端口 0005 修噶机主机名 0001 虚拟机静态IP win网络链接,IP地址:192.168.220.1 - NAT网关:192.168.220.2 - ubuntu静态IP设置: ca…

24年九月份生活随笔

九月份最后一天,烈士纪念日。 上午看了一会儿直播,庄重的仪式,铭记先辈为新中国抛头颅洒热血,当今盛世,如您所愿。 郑州马拉松官方通告,今天十点公布直通,中签,候补结果。 看完直…

算法:153.寻找旋转排序数组中的最小值

题目 链接:leetcode链接 思路分析(二分) 题目要求O(logN)的时间复杂度,那就必然是使用二分算法了。 怎么个二分呢? 首先,我们来寻找二段性 我们看示例一: 3,4,5&…

LeetCode 面试经典150题 172.阶乘后的零

题目:给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 思路: 代码: class Solution {public int trailingZeroes(int n) {return n 0 ? 0 : n / 5 trailingZeroes(n / 5);}…

Android-由switch-case和view.getId()引起的bug:错误:需要常量表达式 的解决办法

无意中,使用按钮测试点击事件,在此过程中使用了switch case语句,在条件switch中使用了view.getId(),出现错误。我记得很早之前写Android程序没啥问题,于是研究了一番。 度娘一番才知道,是因为R文件的缘故。…

【视频目标分割-2024CVPR】Putting the Object Back into Video Object Segmentation

Cutie 系列文章目录1 摘要2 引言2.1背景和难点2.2 解决方案2.3 成果 3 相关方法3.1 基于记忆的VOS3.2对象级推理3.3 自动视频分割 4 工作方法4.1 overview4.2 对象变换器4.2.1 overview4.2.2 Foreground-Background Masked Attention4.2.3 Positional Embeddings 4.3 Object Me…

git eslint扩展,解决git提交因为空格差异而报错

项目场景: 在前端项目开发中,经常会使用eslint,这个方法的好处就是严格要求代码格式。让代码更为严谨。 问题描述 以为eslint格式过于严谨,在git提交的时候,经常会因为一个多了一个空格导致代码提交失败。 原因分析:…

【C++打怪之路Lv4】-- 类和对象(中)

🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…

C语言第三周课

目录 一、C语言中基本语句的分类: 二、数据的输入和输出 1.putchar函数 2.getchar函数 3.printf函数 printf() 的正常输出格式: 输出控制符大全 4.scanf函数 三、顺序结构 四、选择结构 1.if 2.switch 五、循环结构 1.for循环 2.while循环 3.…

【读书笔记-《网络是怎样连接的》- 1】Chapter1-从Web浏览器开始

网络之旅的第一章,我们从在浏览器中输入url开始。本章主要介绍三部分内容。首先是在Web浏览器中输入URL后,浏览器是如何解析URL并生成HTTP请求消息的。生成请求消息后,浏览器需要将请求发送给Web服务器,需要知道Web服务器的IP地址…

2024年必考这个人工智能AI大模型证书!

2024必考这个人工智能AI大模型证书:名额有限,报满截止! Chat GPT 的发布,让大语言模型成了人工智能的焦点。尤其近期发布的大模型各业务场景应用应接不暇,为行业带来新的发展机遇,甚至将重构AI行业。AI行业…

C语言系列4——指针与数组(1)

我们开始C语言的指针与数组 这部分开始进阶了,得反复学习 在开始正题之前,写说一下我们都知道当写一个函数的时候需要进行传参,当实参传递给形参的时候,形参是有独立空间的,那么数组传参又是怎么样的呢,我…

Docker的入门详解

What is docker? Docker是一个开源的应用容器引擎,它基于Go语言开发,并遵从Apache2.0协议。Docker允许开发者将他们的应用以及依赖包打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上&am…

MySQL高阶2004-职员招聘人数

目录 题目 准备数据 分析数据 实现 题目 一家公司想雇佣新员工。公司的工资预算是 70000 美元。公司的招聘标准是: 雇佣最多的高级员工。在雇佣最多的高级员工后,使用剩余预算雇佣最多的初级员工。 编写一个SQL查询,查找根据上述标准雇…