Files
mnote/design/04-tree-domain/done/4-8-tree-shell-cutover-performance-report-v1.md
T

2.9 KiB
Raw Blame History

4-8 [done] Tree Shell Cutover Performance Report v1

更新时间:2026-04-18

测试环境:

  • 前端主站:http://127.0.0.1:3000
  • Rust Webhttp://127.0.0.1:3104
  • 浏览器:Playwright Chromium headless
  • 数据口径:同一工作区下真实 Sidebar + 临时父/子页面样本 + move/embed picker 对话框

1. 测量口径

  • 首包
    • 指主树或 picker 打开后,到对应 surface 首次可见的时间。
  • 首次可交互
    • 指 surface 已出现,且首个可点击行/按钮已可交互。
  • 切页延迟
    • 指点击页面树或文件树行,到浏览器 URL 切到目标页面的时间。
  • 大树展开延迟
    • 指点击页面树真实可展开节点的展开/收起往返显隐完成时间。
  • fallback
    • /api/stream/events 被阻断或失败时,Sidebar 仍能在主站内回到可见可用树视图的结果。

2. 实测结果

2.1 首页与切流 smoke

  • task097-homepage-entry-smoke.js
    • /auth 返回 200 text/html
    • / 返回 307 -> /auth
    • 3104 /health 返回 200

2.2 Sidebar 主树 cutover

  • task101-tree-shell-cutover-smoke.js
    • 首包 / 首次可交互9ms
    • 切页延迟205ms
    • stream/api/stream/events?stream=workspace&projection=sidebar_tree&workspaceId=...
    • fallback:阻断 stream 后仍在 22ms 内显示可用主树

2.3 filetree / picker 回归

  • task102-tree-shell-regression.js
    • filetree 首包 / 首次可交互6ms
    • filetree 切页延迟179ms
    • picker 首包 / 首次可交互264ms
    • picker 搜索输入后结果/空态稳定出现1005ms

2.4 页面树展开样本

  • 真实可展开节点往返展开/收起延迟:124ms

3. 对照与结论

  • 旧 iframe/postMessage 实验壳已退出 Sidebar / filetree / picker 主路径。
  • 当前默认主路径已经是 Next 内统一 tree surface + stream/projection 主链。
  • 3104 与 Convex 连接正常时,主树按 stream 路径工作;3104/stream 失败时,主树仍能通过 fallback 保持可见。
  • 当前开发机口径下,主路径交互均在亚秒级,未再出现此前 3000 因 Convex/tree shell 卡死而无响应的问题。

4. fallback 结果

  • fallback 触发条件:
    • 主动阻断 /api/stream/events
  • 观测结果:
    • 页面不空白
    • Sidebar 主树仍渲染
    • 可继续看到目标页面树节点
  • 结论:
    • fallback 已从“实验性兜底”变成正式切流护栏

5. 残余风险

  • 当前指标来自本地开发环境与小样本 smoke,不代表生产环境大规模树深/大附件工作区的长期 p95。
  • picker 搜索链路仍受搜索索引可见性影响;本轮已验证“搜索后结果或空态稳定出现”,但未把索引收敛时间当作树域切流 blocker。
  • 后续如继续增强 Rust-first renderer,可在不改变当前 cutover 结论的前提下,把这份报告升级为多样本趋势报表。