现状(2026-09-14,#9 第 4c 步之后)
入口包 141,548 B = 138 KiB,CI 的告警线是 > 138,红线 150。
#9 开拆前是 135,752 B,五步涨了 5.8 KB —— 每抽一个外壳组件 / store 涨 ~1 KiB。
拆分不改变加载策略(重的东西照旧 lazy),涨的是样板:组件边界的 $.props /
prop getter、snippet 包装、每个组件一份 svelte-xxxx 类哈希、class 上每个 $state
字段一对 getter/setter(terms 类编译后 ~700 B)。
按源文件归因(sourcemap,会高估数据密集的模块,只用来排序)
| 字节 |
文件 |
备注 |
| 32,338 |
App.svelte |
还会继续降 |
| 12,019 |
shell/FileTree.svelte |
|
| 6,810 |
state/keymap.ts |
一张表,65 条键位的 label / group / accel。入口包只需要 id → 键位;label 和 group 是速查表用的,而速查表是 lazy 的 |
| 4,428 |
shell/Panel.svelte |
|
| 3,496 |
shell/StatusBar.svelte |
|
| 3,425 |
shell/Tabs.svelte |
|
| 3,234 |
main.ts |
|
| 2,858 |
ipc/commands.ts |
70 个 wrapper,每个一行;可能可以按功能拆成几个模块让 lazy 的那些跟着 lazy 走 |
| 2,392 |
shell/FileGlyph.svelte |
文件图标表 |
| 1,602 |
logview/is-log-name.ts |
日志文件名的判据,一张正则表 |
| 1,463 |
state/invariant.ts |
|
怎么办
先不动。 #9 剩下 4b / 4d / 5 / 6 四步,预计再涨 3–4 KiB,到 142 左右,
离 150 还有余量。CI 会开始告警,那是预期内的。
拆完做一次瘦身,候选按「省得多 / 动得少」排:
keymap.ts 拆成 keymap.ts(id + accel,入口要)和 keymap-labels.ts
(label / group,速查表和菜单栏才要)—— 和 langs.ts / langs-load.ts 那次
同一个形状。归因 6.8 KB,实际大概省 3 KB
commands.ts 按功能拆:git 那 20 个 wrapper 只有 git 面板用,而它是 lazy 的
is-log-name.ts:只在打开文件时才需要,可以跟着 langs 一起延后
判据不变:入口包是首屏之前必须解析执行完的那一段。 问一句「这东西在窗口
出现之前有用吗」,没用就该出去。每挪一块前后各量一次,归因只用来排序。
现状(2026-09-14,#9 第 4c 步之后)
入口包 141,548 B = 138 KiB,CI 的告警线是
> 138,红线 150。#9 开拆前是 135,752 B,五步涨了 5.8 KB —— 每抽一个外壳组件 / store 涨 ~1 KiB。
拆分不改变加载策略(重的东西照旧 lazy),涨的是样板:组件边界的
$.props/prop getter、snippet 包装、每个组件一份
svelte-xxxx类哈希、class 上每个$state字段一对 getter/setter(
terms类编译后 ~700 B)。按源文件归因(sourcemap,会高估数据密集的模块,只用来排序)
怎么办
先不动。 #9 剩下 4b / 4d / 5 / 6 四步,预计再涨 3–4 KiB,到 142 左右,
离 150 还有余量。CI 会开始告警,那是预期内的。
拆完做一次瘦身,候选按「省得多 / 动得少」排:
keymap.ts拆成keymap.ts(id + accel,入口要)和keymap-labels.ts(label / group,速查表和菜单栏才要)—— 和
langs.ts/langs-load.ts那次同一个形状。归因 6.8 KB,实际大概省 3 KB
commands.ts按功能拆:git 那 20 个 wrapper 只有 git 面板用,而它是 lazy 的is-log-name.ts:只在打开文件时才需要,可以跟着langs一起延后判据不变:入口包是首屏之前必须解析执行完的那一段。 问一句「这东西在窗口
出现之前有用吗」,没用就该出去。每挪一块前后各量一次,归因只用来排序。