mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 22:05:50 +00:00
fix: 内存优化 — 预测性 compact 阈值、增量 lookups orphaned 修复、deferred slice 引用优化
- P0: REPL.tsx 用 useMemo 包裹 deferred messages slice,避免每次渲染创建新数组引用导致不必要的后台重渲染 - P1: 预测性 compact 阈值改用 effectiveContextWindow - growth,消除与 autocompact buffer 的双重预留;TOOL_RESULT_GROWTH_ESTIMATE 从 20K 降至 15K - P2: 增量 lookups 增加 lastAssistantMsgId 一致性检查和 orphaned server_tool_use/mcp_tool_use 扫描,防止 UI 永久 loading - P3: reactiveCompact 类型断言改为直接使用 'compact' 字面量 - docs: CLAUDE.md 统一使用 precheck 替代分散的 typecheck/lint/test 命令 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1566,7 +1566,15 @@ export function REPL({
|
||||
// Deferred messages for the Messages component — renders at transition
|
||||
// priority so the reconciler yields every 5ms, keeping input responsive
|
||||
// while the expensive message processing pipeline runs.
|
||||
const deferredMessages = useDeferredValue(messages);
|
||||
// Cap at 500 messages to limit memory double-buffering. The bypass
|
||||
// at display-time uses sync messages during streaming and non-loading,
|
||||
// so this cap only affects reduced-motion scenarios.
|
||||
const DEFERRED_CAP = 500;
|
||||
const cappedMessages = React.useMemo(
|
||||
() => (messages.length > DEFERRED_CAP ? messages.slice(-DEFERRED_CAP) : messages),
|
||||
[messages],
|
||||
);
|
||||
const deferredMessages = useDeferredValue(cappedMessages);
|
||||
const deferredBehind = messages.length - deferredMessages.length;
|
||||
if (deferredBehind > 0) {
|
||||
logForDebugging(
|
||||
|
||||
Reference in New Issue
Block a user