跳转到内容
WebMux

布局稳定性与 4× CPU 回归

基于 main@306d253 的文档在 GitHub 上查看编辑此页

pnpm --dir web test:performance 用独立的单 worker 测量嵌入式生产应用,不与普通 E2E 或 Vite 开发服务器共享浏览器、后端、HOME、工作目录或端口。直接运行该命令时每次调用先在私有临时目录构建前端和 Go 可执行文件,测试结束后清理;make test 与 make test-performance 则复用 .cache/webmux-e2e/webmux。

  • 桌面 Chromium 与 Pixel 7 Chromium 在首次导航前设置 CDP CPU rate=4。
  • 从文档启动记录 Layout Shift、Event Timing 和长任务。CLS 使用 1 秒间隔、最长 5 秒的会话窗口,并排除 hadRecentInput;同时要求所有非预期位移之和严格等于 0。
  • 已采集交互的最大 Event Timing 不超过 300 ms。该实验指标不是完整真实用户 INP。
  • 1000 行输出后的真实键盘输入回显不超过 1500 ms。
  • 冷启动延迟 API 750 ms、字体 650 ms;浅色桌面场景显式启用 16 px 占宽滚动条,避免 headless 默认隐藏滚动条掩盖位移。

playwright test --list 列出 20 项:桌面与 Pixel 7 各 10 项,其中 2 项重绘风暴只在桌面运行,Pixel 7 上跳过,实际执行 18 项。覆盖:

  • 浅色/深色冷启动、后台输出和状态更新、新建 Shell、输入、刷新回放、真实 WebSocket 断开和重连、输出突发。
  • 草稿开关、弹窗、会话筛选和切换、延迟仓库发现和 Git 刷新、仓库读取挂起时进入已有终端。
  • 设置页及 3000 行代码文件滚动。
  • 120 张会话卡片中的繁忙会话(顺序、筛选与输入响应)。
  • 文本与图片混合输出在 resize 时的重绘风暴(同步与非同步输出,仅桌面)。

结果和截图写入 web/test-results/performance/,HTML 报告写入 web/playwright-report/performance/。CI 的独立性能任务将这些文件作为 performance-results 上传,并计入 Test result。

输出预览模式(首页默认)始终保留配置行数的高度,包括尚无输出的会话;紧凑列表不渲染预览区域。会话按创建时间排列,后台活跃更新不会重新排序。UI 字体使用 font-display: optional,慢下载时继续使用回退字体,避免迟到替换改变尺寸。终端仍显式等待自己的字体测量。

创建操作先绘制已有的忙碌状态,再提交请求,避免本地快速响应与首次终端加载挤在同一次交互绘制之前。性能报告保留事件目标、输入延迟与处理耗时,便于区分事件处理和后续绘制的成本。

首次启动配置与仓库读取最多等待 1 秒;启动期间的重连与页面恢复事件复用同一个仓库请求。超时会中止初次请求、显示已有会话并提供重试入口。这样慢仓库不会长时间阻挡终端,也不会在超时后突然按迟到的仓库信息重新分组。

工作区根区域保留纵向滚动轨道并设置稳定 gutter;精确指针设备使用固定宽度的 WebKit 滚动轨道,防止 macOS 在首屏绘制后切换原生滚动条模式时改变内容宽度。全屏终端继续由其原有生命周期控制 overflow。这也避免影响独立组件和其他页面的滚动区域。

CPU 降速相对于测试主机;这些测试不能保证任意硬件、网络和数据规模的真实用户指标,也不能替代真实 iOS Safari/Android 输入法、原生选择菜单或软键盘验证。