vue-cli老项目继续优化:json压缩神器 compress-json

news/2024/10/11 17:59:06/

前言

上文讲到一个 vue-cli 带脚本生成内容的老项目的打包时间已经从 40min ,优化到 12min ,再到 9min

还有可以考虑的方式包含缩小脚本体积、依赖分包、构建的缓存等等。

那么本文就来讨论缩小脚本体积的方式。

分析

前文已知,生成的大量的脚本内容都是JSON的格式。

众所周知,JSON格式是一种 key-value 的格式,这样的格式,在遇到大量的描述内容时,势必会遇到 key 不断重复的问题,这就造成了文件体积迅速膨胀,尤其是在大量的数组,仅 value 不一样的时候。

所以,JSON 的格式一定有极大的压缩空间,尤其是我当前所遇到的场景,至少有50%以上的体积可以被压缩掉。

当然本文就不讨论具体的压缩方法了,直接上网查库解决问题。

当前生成文件的大小:

当前打包时间:

对压缩库的要求

首先,能够在前端js环境和 nodejs 环境中直接压缩和解压缩使用,这是必须满足的。

其次,压缩率要尽量高,压缩后的内容不必一定要可读,二进制都行。

然后,一定要无损压缩,解压后不影响后续的使用。

逛了一圈后选中了 compress-json 库。

github:https://github.com/beenotung/compress-json

该库不仅可以在js中使用,还有PHP、Python等版本。

使用压缩库

安装

yarn add compress-json

压缩脚本

javascript">// 接收外部命令传入的json
const json = process.argv[2]// 使用 compress-json 进行压缩
const compressedJson = require('compress-json').compress(JSON.parse(json))// 返回压缩后的字符串
console.log(JSON.stringify(compressedJson))

修改生成文件的命令

citem=$(node compress.js "${item}")
echo "import { decompress } from 'compress-json';export const ${uuid} = decompress(\`${citem}\`)" > "${filename}.js"

对比效果

压缩后的文件大小

压缩后的打包时长

我们可以看到打包时长略有缩短,不是特别明显,说明体积对打包时长的影响不算特别大。

当然,体积小肯定不只是这里的作用,构建产物的体积变小了,对整个项目的访问无疑是好处巨大的。

大胆猜测一下,在之前的优化中,已经将 JSON 内容修改为了字符串的形式,对于编译过程来说,这些内容几乎已经原样输出,如果这样的话,压缩过后,在本地尤其磁盘速度和cpu都比较空闲的时候,对打包的时长影响不会很大。

写在最后

虽然本次优化的结果在本地打包时不是特别明显,但是显著减小了构建产物的大小。

最后本次修改放到了 Jenkins 打包脚本中,打包时间减少到了 7min,已经快接近正常的打包时长。

当然,接下来还可以继续考虑构建分包,构建缓存等等方案。

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


http://www.ppmy.cn/news/1537559.html

相关文章

Linux CentOS stream9配置本地yum源

在Linux系统中,yum源配置是一个重要的环节。把系统安装时配置的国外yum源转换为国内yum源,能够帮助系统快速安装软件包。对于网络环境不稳定或无法联网的系统,配置本地yum源,可以让用户在离线状态下也能进行软件包的安装,十分重要。 一、国内源 在使用Linux的日常工作中…

i18n多语言项目批量翻译工具(支持84种语言)

这里写自定义目录标题 打开‘i18n翻译助手’小程序快捷访问 打开‘i18n翻译助手’小程序 1.将需要翻译的json文件复制到输入框(建议一次不要翻译过多,测试1000条以内没什么问题) 2.等待翻译 3.翻译完成,复制结果 快捷访问

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

day 20 二叉树 part05

654.最大二叉树 注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下标索引直接在原数组上操作,这样可以节约时间和空间上的开销。 题目链接/文章讲解:代码随想录 lass Solution { private:// 在左闭右开…

前端接收到的日期格式为 2021-12-07T16:44:53.298+00:00 怎么办?

在写项目的时候,给前端发送了一个 Date 类型的数据,发现格式不对: 可以通过在application 配置文件中进行如下配置: spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 前端在获取就发现格式正确

[Linux]从零开始的网站内网穿透教程

一、前言 在上一次教程中,我们教了大家如何搭建一个网站并且在内网中能被访问到。这样也出现了一个问题,我们的网站被我们部署得再好看,始终只有内网中的设备可以访问。如果别人和我们不在一个局域网中,就无法访问我们搭建的网站了…

Gin项目的初始化步骤和常见错误记录

相信很多人对Go的环境安装和Gin项目的初始化都已经手拿把攥很是熟练了,本节介绍一个自己新建Go项目时非常好用的设置以及记录一下Gin项目的初始化过程和常能遇到的错误。 一个容易忽略的Go ENV 在安装了Go的电脑中,我们可以在命令行执行 go env 命令&…

【无标题】SAP-MM物料检验分步过账z

在项目中,QM过账检验完成会一步过账,但实际业务部门需要质检只判定是否合格,仓库进行过账。 第一步ZQM006 质检判定 上图中选择合格,那么默认进入页面的使用决策代码为合格,如下图 如果勾选不合格,默认代码为ZR拒绝。 此处的出现让步接收数量,没有让步金额,金额是按物…