<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>缓存 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E7%BC%93%E5%AD%98/</link><description>Recent content in 缓存 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E7%BC%93%E5%AD%98/index.xml" rel="self" type="application/rss+xml"/><item><title>第12章 性能优化算法</title><link>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-12/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-12/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;过早优化是万恶之源，但在正确的时机做正确的优化，则是工程艺术的巅峰。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="121-问题引入"&gt;12.1 问题引入&lt;/h2&gt;
&lt;p&gt;一个成熟的 AI Agent 系统面临着多维度的性能挑战。Claude Code 作为一个包含数十万行 TypeScript 代码的终端 AI 助手，需要同时解决以下问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;启动速度&lt;/strong&gt;：用户在终端输入 &lt;code&gt;claude&lt;/code&gt; 后，如何在亚秒级时间内完成初始化？数百个模块的加载、配置的解析、API 客户端的构建——任何一项阻塞都意味着体验的劣化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文窗口管理&lt;/strong&gt;：模型的上下文窗口是有限的（通常为 200K tokens），而一个长时间的编程会话可能产生数百万 tokens 的对话内容。如何在不超过窗口限制的前提下最大化信息密度？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存控制&lt;/strong&gt;：终端 UI 需要维护大量的渲染状态。一个包含 1000 条消息的会话，如果不做虚拟化，仅 React fiber 和 Yoga 布局节点就可能消耗 250MB 内存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;渲染流畅性&lt;/strong&gt;：流式输出时每个 token 都会触发渲染更新。如何避免因频繁重绘导致的 CPU 峰值和卡顿？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本章将深入剖析 Claude Code 针对这些问题的系统性优化策略，从 Token 计数的精妙权衡，到上下文压缩的三级体系，再到终端渲染的虚拟滚动算法。每一项优化背后都蕴含着对&amp;quot;精确性&amp;quot;与&amp;quot;速度&amp;quot;之间平衡的深刻思考。&lt;/p&gt;
&lt;h2 id="122-启动优化策略"&gt;12.2 启动优化策略&lt;/h2&gt;
&lt;h3 id="1221-性能度量驱动的优化"&gt;12.2.1 性能度量驱动的优化&lt;/h3&gt;
&lt;p&gt;Claude Code 遵循一个朴素但有效的原则：&lt;strong&gt;不能度量的东西无法优化&lt;/strong&gt;。启动阶段的每一个关键检查点都被 &lt;code&gt;startupProfiler&lt;/code&gt; 精确记录：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// startupProfiler.ts — 启动性能度量框架
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PHASE_DEFINITIONS&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;import_time&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;cli_entry&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;main_tsx_imports_loaded&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;init_time&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;init_function_start&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;init_function_end&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;settings_time&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;eagerLoadSettings_start&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;eagerLoadSettings_end&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;total_time&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;cli_entry&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;main_after_run&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;export&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;profileCheckpoint&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;)&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;SHOULD_PROFILE&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#75715e"&gt;// 非采样用户零开销
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;perf&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getPerformance&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;perf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;mark&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;DETAILED_PROFILING&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;memorySnapshots&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;push&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;process&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;memoryUsage&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该框架采用&lt;strong&gt;分层采样&lt;/strong&gt;策略：100% 的内部用户和 0.5% 的外部用户被采样记录启动性能指标，而完整的内存快照报告仅在显式启用 &lt;code&gt;CLAUDE_CODE_PROFILE_STARTUP=1&lt;/code&gt; 时生成。这种设计确保了生产环境中性能数据的持续可观测性，同时将度量本身的开销降至最低。&lt;/p&gt;</description></item></channel></rss>