第28章 · 性能工程
第28章 · 性能工程
28.1 启动优化
Claude Code的启动优化是工程的亮点:
零导入版本检查(<5ms):
cli.tsx的快速路径在不加载任何模块的情况下处理--version请求,仅需文件系统读取。
并行初始化:
- MDM(Mobile Device Management)检查
- 钥匙链(Keychain)读取
- API预连接 三者并行执行,避免串行等待。
三阶段初始化:
init() → setup() → main(),每个阶段只加载必需的依赖。
28.2 渲染优化
帧缓存:渲染结果被缓存,只有在状态变化时才重新渲染。 DOM差异更新:计算最小化的ANSI输出序列。 DECSTBM硬件滚动:利用终端的硬件滚动能力,避免重绘整个屏幕。 FPS监控:内置性能监控,帮助识别渲染瓶颈。
28.3 Token优化
Token是Claude Code最昂贵的资源,优化策略包括:
缓存断点:在消息历史中插入缓存断点,使后续请求能复用之前的prompt处理结果,节省高达90%的输入Token成本。
微压缩:基于文件路径索引的精确缓存失效——当工具输出中包含文件内容时,如果文件未变化,使用索引引用替代全文内容。
延迟工具加载:ToolSearchTool + 关键词缓存允许工具定义按需加载,而非一次性加载全部54个工具的Schema到系统提示中。
递减收益检测:连续3次压缩回收不足500 Token后自动禁用压缩,避免无意义的计算开销。
28.4 内存管理
InProcessTeammate 50消息上限:从"鲸鱼会话"(292个Agent/36.8GB)事件中汲取教训。
消息历史100条上限:在某些模式下限制保留的历史消息数量。
Screen缓冲区优化:StylePool的ANSI样式interning减少了终端输出生成过程中的内存分配。
延迟模块加载:通过Lazy Require,未使用的模块不会占用内存。