Skip to content

入口包 138 KiB 贴着告警线:拆 App.svelte 每步涨 ~1 KiB,拆完要做一次瘦身 #32

Description

@Spc-jgs

现状(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 会开始告警,那是预期内的。

拆完做一次瘦身,候选按「省得多 / 动得少」排:

  1. keymap.ts 拆成 keymap.ts(id + accel,入口要)和 keymap-labels.ts
    (label / group,速查表和菜单栏才要)—— 和 langs.ts / langs-load.ts 那次
    同一个形状。归因 6.8 KB,实际大概省 3 KB
  2. commands.ts 按功能拆:git 那 20 个 wrapper 只有 git 面板用,而它是 lazy 的
  3. is-log-name.ts:只在打开文件时才需要,可以跟着 langs 一起延后

判据不变:入口包是首屏之前必须解析执行完的那一段。 问一句「这东西在窗口
出现之前有用吗」,没用就该出去。每挪一块前后各量一次,归因只用来排序。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions