详解 Claude Code 源码
赛博浮世绘 · 晓风乾 · 24 站拆解
回首页
详解 Claude Code 泄露与全景 1.4 · 启动链路极限优化
篇章一 · 1.4

启动链路极限优化

51 万行的程序怎么做到「秒开」?答案不是「机器快」,是四个字:能不加载的,一个字节都不加载。

claude --version 的模块加载量是

入口文件 cli.tsx 的所有 import 都是动态的——先看命令行参数再决定加载什么。最极端的路径 --version 连一个模块都不加载,直接输出编译期内联的版本号字符串。

cli.tsx · 10 级快速路径分发
优先级匹配条件加载量
1--version / -v直接 return
2--dump-system-prompt最小
3--claude-in-chrome-mcp专用模块
4--daemon-worker精简
5remote-control / bridge含 auth + policy
6daemon含 configs + sinks
7ps / logs / attach / kill含 configs
8new / list / reply专用模块
9-10environment-runner / self-hosted-runner专用模块
默认无特殊标志(正常使用)完整 main.tsx785KB

源码注释原话:Fast-path for --version: zero module loading needed

命令行模拟器 · 同一个 claude,六种代价 点左侧命令,看右侧装载仪表盘
terminal — claude
试试点下面的命令 →
模块装载台
∅ 零装载
0耗时 ms0装载 KB
模块仓库(点命令后按需起飞)
选个命令——看哪些积木起飞、堆多高。
main.tsx 的骚操作 · import 期就开跑 I/O

正常思路是「加载完模块 → 再执行逻辑」。main.tsx 反着来:在模块顶层(import 评估期间)就把两个最慢的 I/O 启动出去——读 macOS 钥匙串、起 MDM 子进程。它们与后续约 135ms 的模块加载并行,等主流程需要结果时早就绪了。

串行 vs 并行 · 启动时间线对比 滚动到这里自动播放
串行(普通程序)
import 模块 135ms
读钥匙串 90ms
起 MDM 110ms
≈335ms
并行(Claude Code)
import 模块 135ms
钥匙串(后台)
MDM(后台)
≈135ms
两个 I/O 在 import 语句求值时就已启动(源码里用 eslint-disable 标注了这处「有意的副作用」),总耗时取决于最慢的一条线。
初始化双序列 · init 15 步 + setup 16 步
init() · 进程级(执行一次)

用 lodash memoize 包裹保证只跑一次;挂在 Commander 的 preAction 钩子上——所以 --help 会完全跳过初始化。

配置校验优雅退出注册自定义 CA 证书OAuth 信息JetBrains 检测仓库检测策略限制TCP+TLS 预连接Windows shell…共 15 步

亮点是 preconnectAnthropicApi():正式请求前先完成 TCP + TLS 握手,把连接建立的成本从「第一次对话」里挪走。

setup() · 会话级(每次会话)

先检查 Node.js ≥ 18,然后按序铺开整个会话要用的基础设施。

UDS 消息服务Worktree + tmux文件监听器Session Memory版本锁定命令预取插件热重载API Key 预取…共 16 步

最后一步是 --dangerously-skip-permissions 的多重安全检查——危险参数也要走完安检。

feature() · 编译期就删掉的代码

Bun bundler 提供的 feature()构建时求值,返回 false 的分支被死代码消除(DCE)物理删除——不是运行时开关,是产物里根本没有:

import { feature } from 'bun:bundle';

if (feature('KAIROS')) {
  // 内部专用代码 —— 外部构建产物中此块不存在
}

同一份代码库,构建出「内部版 / 外部版」两种产物。常见 flag:KAIROS(后台守护)、COORDINATOR_MODEABLATION_BASELINE(A/B 基线:关掉所有高级功能)、DUMP_SYSTEM_PROMPT 等。

过站检查
🎮 同样是「不干正事」,为什么 claude --help 连初始化都跳过了?
初始化序列挂在 Commander 的 preAction 钩子——只有真正要执行动作的命令才跑它。--help 是「读说明书」,不是「开机」,15ms 里连 init 的门都没进。这是「按需初始化」和「按需加载」的双层配合。
本站要点:启动优化的三层武器——快速路径分发(少加载)、import 期并行 I/O(重叠等待)、编译期 DCE(直接删除)。这是「延迟加载」做到极致的样子:不是lazy,是 zero。