Skip to content

v0.7.1 — 体积再瘦身:安装包与磁盘双降

Choose a tag to compare

@zzz-sc-tech zzz-sc-tech released this 16 Oct 05:15
· 64 commits to main since this release

v0.7.1 — 体积再瘦身:安装包与磁盘双降

本 Release 为六级版(38 套六级真题)。
在 v0.7.0 增量更新的基础上,继续压缩安装体积与下载量。

这次省了什么

项 v0.7.0 v0.7.1 省下
安装后磁盘占用 约 1.26 GB 约 1.0 GB 约 260 MB
依赖包 -deps.zip 123 MB 约 55 MB 约 68 MB
完整包 .7z 299 MB 约 240 MB 约 60 MB
程序包 -update.zip 3.6 MB 3.6 MB —

怎么做到的

① 依赖树按「运行期闭包」裁剪

前端与管理后台都以预编译好的产物提供服务,运行期根本不需要 React、antd、
Vite、TypeScript、ESLint 这些构建期依赖。改用白名单制:从真正的运行入口出发
递归展开依赖图,只保留闭包内的包(node_modules 解压后 365 MB → 141 MB)。

顺带清掉三个死依赖:resend(邮件服务,源码零引用)、mysql v2(已废弃,
实际用 mysql2)、以及一批 Expo/React Native 残留。

② MySQL 单机自用调参

参数 原值 新值 原因
innodb_redo_log_capacity 100 MB(默认) 32 MB 数据库才 16 MB
skip-log-bin 关闭→开启 开启 binlog 是为主从复制设计的,单机无用且持续增长
临时表空间上限 无限增长 64 MB 防跑飞
innodb_buffer_pool_size 256 MB 128 MB 省的是内存不是磁盘

实测:MySQL 数据目录 219 MB → 约 140 MB,数据完好(38 门课程校验通过)。

③ 这些改动对老用户同样生效

MySQL 配置由启动器每次启动时生成,存量安装下次启动即生效,无需重装。
依赖裁剪则通过更新包传递——并且本版改了依赖门控的判据(见下),
确保老用户能真正拿到裁剪版、且本地多余依赖会被清理掉。

依赖门控改版(重要)

v0.7.0 用 package-lock.json 的哈希判断「依赖有没有变」。但裁剪只改打进包的内容,
不改 lock 文件——照旧判据,老用户会得出「依赖没变」从而跳过依赖层,
磁盘永远瘦不下来。

本版改为:

  • 更新清单里带依赖文件清单的哈希与归属包名清单;
  • 客户端比对本地标记(更新器安装成功后写入),哈希不同才下载;
  • 依赖层安装后清理本地多余的旧依赖(覆盖安装只覆盖不删除),
    工作区包 @juting/* 永不删。

结果:老用户升级到本版时会下载一次依赖包(约 55 MB),之后本地多出来的
构建期依赖会被自动清掉,释放约 220 MB 磁盘。

资产说明

文件 用途
juting-v0.7.1-win-full-cet6.7z 首次安装用这个,需 7-Zip 解压
juting-v0.7.1-win-full-cet6-update.zip 程序层(客户端一键更新必下)
juting-v0.7.1-win-full-cet6-deps.zip 依赖层(按需,客户端自动判断)
juting-v0.7.1-win-full-cet6-media.zip 音频层(按需,客户端自动判断)
SHA256SUMS.txt 校验和

验证

改动涉及依赖裁剪,风险在「裁掉运行期要用的包」。因此做了真实启动验证
(不是静态检查):裁剪后的目录完整跑通全栈启动——数据库初始化、38 门课程导入、
后端健康检查、学习端与管理端 HTTP 200、音频流实测返回 audio/ogg 与完整字节数、
课程数据接口返回完整元数据。

过程中实测抓到两个会导致崩溃的裁剪 bug(作用域包容器目录被误删、
vite preview 依赖的 @vitejs/plugin-react 被误裁),均已修复并补了回归测试。

数据

  • 六级版:38 门 / 2017—2026 真题 / 字幕 7690 行 / 译文覆盖 99% / 题干锚点映射 100%