Files
Agent-System/.doc/test-reports/2026-09-17-initial-load-performance-baseline.md
T
weichenandCursor 3445d386ea docs(perf): archive initial-load diagnosis and remediation plan
Capture audit evidence, performance baseline, and U1–U7 remediation plan
without business code changes so the work can land on dev before U2.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 08:08:20 +00:00

3.5 KiB
Raw Blame History

title, status, created, updated
title status created updated
首次加载性能诊断测量(非优化验收) done 2026-09-17 2026-09-17

诊断测量报告

范围与结论

只读未登录浏览器基线、静态资源响应与受控网络实验完成;没有业务代码修改,不是优化 PASS 或完整重启验收。用户补充现象为 3100/8080/8081 系统重启后第一次进入约十数秒。

审计 包含数值、因果链、源码定位和限制;方案 含重启矩阵、性能预算与治理回归。

环境与步骤

  • 2026-09-17;源码读取主仓 feature/rdev-core@52f0fbc,文档 worktree 基线 dev@d0ef696。
  • 实际 app-dev image sha256:355ec1af39c5233ac7e710c6c4300779681edd96d5da85258a9dde71a1698af2;app-test sha256:ee7df995c59eb0faf8e26160113d36fcdb57844b4e96989709f8b6edc2f00395。未证明这些镜像与源码 commit 相同。
  • 主 JS hash 分别为 8080 index-BLnmtk_3.js、8081 index-Dk3TnkZv.js、8000 index-BT80OB_W.js。
  • 浏览器采用现有 mcr.microsoft.com/playwright:v1.63.0-noble、headless Chromium;不登录、不调用写接口、无截图/正文保存。基线未加 CPU 限速。
  • 宿主 Playwright 因缺 libatk 启动失败;隔离浏览器容器成功,不安装/修改宿主库。
  • 新 context 冷缓存 → 同 context 第二次导航;页面 input 可见后等 1.5 秒采集 Resource Timing。每场景 n=1,未报告分位数。
  • 受控场景包括 CDP 10/2 Mbps + 80ms、字体立即失败、字体延迟 5 秒后失败。CDP document RTT 未精确达到设置值,因此是带宽敏感性实验,不是公网仿真认证。
  • 3199 隔离 Vite 使用主仓源码、独立 /tmp 空 cacheDir,不清理原有 3100 依赖缓存,不更改 Vite 配置;结束后停止临时实例。
  • 日志仅提取启动时间和固定事件标记,不保存原始日志。现有 app start→打印监听 dev 166 ms/test 142 ms,不等同真正 ready 或整机重启耗时。

结果

检查 结果 限制
三容器主 JS 未压缩 确认,约 2.80–2.82 MB 用户上游代理压缩未知
8080 冷/热差异 662/62 ms n=1,本机未登录
带宽敏感性 10 Mbps 2.64 s;2 Mbps 11.78 s 模拟,不是用户网络
外部 CSS 阻塞 人为延迟5s → 登录5.16s 不能称自然延迟5s
3100资源成本 207 请求/12.24 MB 当时 Vite 服务已运行
隔离 Vite 空缓存 首访1.58s/再次171ms,首访14.45MB 启动早于浏览器连接,非完整冷启动总耗时
登录态/整机重启 未覆盖 U1/U7必须补齐
功能/真实PI/优化收益验收 未执行 本轮无实现

原始数据与复现

证据目录:assets。browser.json、controlled.json、vite-cold.json 为浏览器结果;assets.json 为静态头/体积摘要。对应 *.cjs 是诊断探针,不是业务测试。

复现普通浏览器基线可使用已有 Playwright 镜像,挂载本仓到 /repo:ro、证据临时输出目录到 /out,执行 /out/probe.cjs。脚本假设 /repo/web/node_modules/playwright 存在;运行前复制脚本到临时输出目录,不覆盖既有证据。字体拦截会禁用该 context 缓存,不得拿其 warm 结果与正常 warm 作性能比较。

交付状态

方案及证据仅在独立本地 worktree,未合 dev、未 push;无共享服务重启/镜像重建。后续实施按 CURRENT 认领与集成槽规约执行。