Files
cc-web/.planning/session-switch-live-failure/findings.md

19 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 排查发现
- 线上已使用 GET /api/sessions/:id,HTTP读取不等待WebSocket。
- 缓存分为完整新鲜、完整过期和未命中;运行中的会话不能使用完整新鲜缓存直出。
- 首屏读取12条、后续24条;首屏附带完整运行正文和工具调用快照。
- 完成快照后,浏览器才订阅实时更新;订阅修订变化会触发后台HTTP对账。
- 2026-10-18最近业务查询记录200、服务端执行为毫秒级;该计时不覆盖进入处理函数前等待、传输、浏览器解析与显示。
- 工作区已有图片显示及文件浏览器等未提交修改,必须保留。
- 真实归档隔离副本首屏实测:常用会话约805KB/122个工具,另一会话1.21MB/143个工具,最大副本6.31MB/311个工具;普通本机Firefox切换约0.4~1.5秒,未复现45秒超时。
- 实际工具结果占主要体积,最大单条工具输出约1MB;闭合的工具details仍立即构造完整输出DOM,最大副本出现约1秒主线程停顿。
- 正在受控传输夹具下复现完整工具输出绑在首屏导致的45秒请求超时;不据此断言现场网络有故障。
- 2026-10-19线上请求02:27:06发出,02:28:25才进入HTTP处理函数,处理本身39ms;8秒CPU采样的大部分样本落在parseJsonTopLevelSuffixFields,调用源为WebSocket的sendSessionList。
- 原算法对每个嵌套id/title候选复制并JSON.parse整个剩余后缀,近二次方成本与GC阻塞了所有HTTP请求。已改为从根结束符反向单次扫描,只解析完整顶层元数据。
- 列表改读归档loadMetadata,不读正文块、不因快照过期而同步重建;按归档修订及快照stat缓存列表字段,标题/未读变化立即失效。
- 128KB密集工具伪键只需14次JSON解析、约12ms;8份大旧快照刷新列表与HTTP读取并发回归通过。290份实际会话只读元数据探针无正文块读取和写盘。
- 线上重启后真实Firefox点击三个现有会话,分别352/430/184ms显示,当前运行正文恢复且工具详情完整。
- 追加并发刷新列表的连续9次真实点击,120~462ms全部显示,无浏览器错误;生产历史和未读未被测试修改(测试浏览器阻断实时订阅,另用鉴权WS只发list_sessions)。
- 290份实际会话元数据冷读1978ms;相同进程后续两次列表47/19ms,修订缓存避免每次重新解析清单。