docs: record second parallel performance round
This commit is contained in:
@@ -800,9 +800,52 @@ Renderer 主线程降速 4 倍(Main 不降速,每次 reload 后重新应用
|
||||
加入滞后窗口后降到 15–16%。剩余开销主要在新行渲染和 `getBoundingClientRect` 测量,后续
|
||||
可把锚点测量合并到每帧一次,或给 Markdown 结果加缓存。
|
||||
|
||||
#### 2026-10-03 第二轮并行:滚动、Markdown 缓存、侧栏窗口化、App 继续瘦身、活动记录
|
||||
|
||||
- **滚动(`ChatHistoryPane.tsx`、`chat-message-window.ts`):** 滚动事件只读 `scrollTop` 等
|
||||
滚动容器指标;是否重新取窗改为每帧最多判断一次,并用“锚点行 + 缓存行高”推算视口位置,
|
||||
稳定滚动时不读元素几何。提交后只有挂载集合或占位高度变化时才校正锚点;上内边距缓存,
|
||||
在 resize、激活和重新取锚点时刷新(真实 Electron 毛玻璃测试曾因缓存旧边距偏 105 px,已修)。
|
||||
- **Markdown 渲染缓存(`markdown-render-cache.ts`):** 按源文本和管线配置缓存解析后的 hast
|
||||
树(LRU),重新挂载的行跳过 micromark/remark/rehype/KaTeX,只做 hast → React。
|
||||
- **侧栏窗口化(`use-conversation-list-window.ts`):** 60 个会话以上只挂载视口附近的行,
|
||||
活动会话、菜单、重命名、获得焦点的行保持挂载;`aria-setsize`/`aria-posinset` 保留总数。
|
||||
- **App 继续瘦身:** 会话持久化与历史加载(`conversation-persistence.ts`)、刷新调度
|
||||
(`conversation-refresh.ts`)、Agent 事件处理(`agent-event-handler.ts`)、历史面板
|
||||
(`ConversationHistorySlot.tsx`)移出 App。`App.tsx` 从约 10,960 行降到 9,566 行,lint 上限
|
||||
改为 9,600。
|
||||
- **活动记录(`activity-history-plan.ts`):** Main 的整份替换只校验、序列化变化的记录;
|
||||
新增增量 IPC `activity-history:update`。Renderer 还没有改用增量接口。
|
||||
- **会话读取:** `conversations:list-summaries` 和 `conversations:get` 也改由只读 worker 执行。
|
||||
- **`npm run perf:app` 驱动:** 侧栏窗口化后不再一次挂载全部会话,驱动改为按 `aria-setsize`
|
||||
判断加载完成,点击会话前逐屏滚动侧栏直到该行挂载。
|
||||
|
||||
`npm run perf:main`(1,000 个会话 / 2 万条消息 / 5,000 条活动记录,Main 事件循环最大延迟):
|
||||
|
||||
| 路径 | 改动前 | 改动后 |
|
||||
| --- | --- | --- |
|
||||
| 会话摘要列表 | 25.4 ms | 0.8 ms(单次耗时 31 ms,在 worker 上) |
|
||||
| 活动记录整份替换,无变化 | 13.8 ms | 9.3 ms |
|
||||
| 活动记录增量更新 1 条 | — | 5.3 ms |
|
||||
|
||||
`npm run perf:app`,4× 降速,改动前(`169941c`)与改动后各 3 轮:
|
||||
|
||||
| 场景 | 改动前 | 改动后 |
|
||||
| --- | --- | --- |
|
||||
| 滚动长会话:帧 p95 / 掉帧 | 25–50 ms / 10–11% | 17–41 ms / 9–10% |
|
||||
| 打开 2,000 条消息会话:长任务 / 点击 p95 | 165–170 / 238–247 ms | 97–105 / 211–218 ms |
|
||||
| 首次切换会话:长任务 / 点击 p95 | 1,969–2,115 / 444–460 ms | 1,256–1,341 / 425–435 ms |
|
||||
| 切回刚看过的会话:长任务 / 点击 p95 | 1,084–1,183 / 151–158 ms | 152–205 / 110–146 ms |
|
||||
| 流式输出 40 KB:长任务总时长 / 掉帧 | 1.6–2.4 s / 90–99% | 0.33–0.41 s / 63–72% |
|
||||
| 流式时打字:长任务 / 按键 p95 | 3.0–3.6 s / 41–48 ms | 0.53–0.64 s / 29–43 ms |
|
||||
| 有历史时打字:DOM 节点 | 4,382 | 705–719 |
|
||||
|
||||
不降速:全部阈值通过;流式输出和流式时打字的长任务均为 0。上一轮滚动的退化已消除(本轮基线
|
||||
已含窗口化,故与 `53b9ecb` 的 17 ms / 7% 不完全可比,帧 p95 在两版中都波动较大)。
|
||||
|
||||
### PERF-14 状态
|
||||
|
||||
- **优先级 / 状态:** P2 / 进行中(消息时间线已窗口化;侧栏未虚拟化)
|
||||
- **优先级 / 状态:** P2 / 进行中(消息时间线和侧栏已窗口化;页内查找等限制未解决)
|
||||
- **实施条件:** `PERF-13` 完成会话与消息迁移,行组件 props 已稳定。
|
||||
- **范围:** 消息时间线和会话侧栏优先;保留滚动位置、跳转、展开状态和“加载更早消息”语义。
|
||||
替换新面板分两步渲染(`09c415b`);侧栏 5 秒重排状态随侧栏迁出 App。
|
||||
|
||||
Reference in New Issue
Block a user