Skip to content

perf: reduce idle work, audio memory and move latency - #37

Merged
renyijiu merged 8 commits into
mainfrom
codex/performance-runtime-fixes
Oct 7, 2026
Merged

renyijiu merged 8 commits into
mainfrom
codex/performance-runtime-fixes

Conversation

@renyijiu

@renyijiu renyijiu commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Summary

降低等待落子时的持续绘制、音频与模型内存,以及开局、选子、吃子和切换画质时的主线程开销;棋局规则、存档格式和 AI 节点预算保持一致。

  • 空闲场景按需绘制,动画只更新活动棋子;低画质真正关闭原生抗锯齿。稳定灯光数量,并在绘制前异步准备棋子及吃子着色器,切档和 WebGL 恢复都遵守就绪状态。
  • 长音乐使用经哈希校验的原生媒体;零主音量不初始化设备、运行中归零会暂停。音乐/环境音归零时停止对应循环,原生音乐接管后释放合成缓存;并发解锁等待同一个完整结果,失败仍可恢复合成音乐。
  • 红黑棋子共享只读顶点数据,仅颜色独立;原始模型的静态包围体只计算一次,实例保留独立骨架和边界。可选背景加载慢时,棋盘仍可显示与操作。
  • AI 使用原生任务让出或 MessageChannel,同档大师新局复用 Worker;搜索和棋谱验证减少重复计算。保留主分支的按需后处理、棋子缓存和引擎缓存限制。

Related: #30, #35

同机 M1 Max、可见 Chromium、1920×1080 的有限样本;前期审计基线为 2819496a,本轮补充基线为 173301af,不能全部当作相对当前 main 的独立 A/B:

指标 修正前 修正后
high 空闲 4 秒绘制帧数 226 0
应用持有的音频 PCM 32.96 MiB,前轮已降至约 6.6 MiB 稳定播放约 3.66 MiB
首次选子新着色器程序 5 1 个光环程序
高→低画质最长主线程任务 278 ms 未观察到 ≥50 ms 任务
低→高画质最长主线程任务 约 120–153 ms 65 ms
首次 AI 吃子表现长任务 73–78 ms 未观察到 >50 ms 任务
AI 吃子最大帧间隔 67.63 ms 最终正式样本 18.64 ms

LOD1/2 阵营几何合计少复制约 10.16 MiB CPU 数据;此数不是 GPU 显存实测。PCM 不含原生媒体内部缓冲,交接淡出期间仍会短暂持有旧缓存。详细证据和历史失败记录见性能修正记录。

Validation

  • npm run typecheck
  • npm run lint
  • Relevant unit/runtime tests
  • Production build or browser smoke when release behavior changes
  • npm run test:bundle when client imports or dependencies change

独立代码审查完成,无待修问题(status: complete,记录 20261002-064801-b4c9f3a6)。灯光数量目前由程序编译次数和吃子运行时采样间接验证,尚无覆盖所有状态的直接数量断言。

本地验证:

  • 格式、类型、lint、405 项单元/运行时测试、模型/音频/AI 预算通过。
  • npm test、npm run test:bundle 通过:4 项生产 HTML/响应合同检查、3 项 JS 预算测试;本次依赖更新后初始 JS 静态闭包 443.6 KiB gzip,预算通过。
  • Chromium / Firefox / WebKit 音频 15 项、开发环境渲染 3 项通过,包括静音/零音量冷启动、暂停恢复、连续开局及特效下载失败降级。
  • 最终生产构建运行时 7 项、桌面/移动视觉 5 项、正式可见浏览器性能 2 项通过;画质资源稳定性及 WebGL 恢复 2 项通过。
  • 音频重复解锁、背景请求悬挂、WebGL 恢复时编译仍未完成的吃子路径,都有修复前失败、修复后通过的回归证据。
  • 14 个真实模型资产验证包围体、落地偏移和 idle 拾取一致,实例骨架及边界独立。高低画质反复切换后资源计数稳定。

正式性能门槛沿用前轮已记录的口径:走子/巡游独立采样、平均帧间隔 ≤17.5 ms,场景 p95 取同次空闲 rAF p95 +1 ms 且封顶 20.24 ms;AI p95 ≤20.24 ms,并检查最大帧和表现长任务。本轮未放宽门槛,也不声称通过原来的固定 p95 ≤16.7 ms 门槛。

2026-10-07 CI 修复复验:Node 22.13.0 / npm 10.9.2 下重新执行 npm ci,依赖审计 0 告警;405 项单元/运行时测试、2 项依赖安全回归、908 项上游 braces 测试、构建与预算、模型优化工具通过。CI 对应浏览器流程为生产 12 项、渲染 3 项、在线对弈 1 项通过;100 次开局压力测试仍按常规 CI 配置跳过。

Visual and asset changes

  • No visual/asset change — 选子保留光环,移除局部点光源;前轮含俯视与低画质抗锯齿调整。
  • Screenshots or reviewed baseline diffs attached
  • Git LFS objects are hydrated and tracked correctly — 验证使用哈希匹配的完整对象,资产内容未改动。
  • Source, license, provenance, manifests, and validators updated — 不适用,无新素材。

最终截图复验全部通过,本轮无需更新基线。前轮已人工检查并更新 6 张低画质基线,说明见性能记录。

桌面截图 · 移动截图

Risk

  • 切回高画质仍有约 65 ms Canvas 重建任务;不支持并行着色器编译的设备没有同等收益保证。
  • Firefox 原生音频设备初始化仍有平台开销;原生媒体循环不保证采样级无缝,移动真机音质、GPU 和功耗尚未验收。
  • 回滚本 PR 提交即可恢复原行为,无存储迁移或资产替换。安全补丁为独立提交。

Supply chain and security

  • No dependency, workflow, permission, secret, or third-party provenance change — 包含下述依赖安全补丁、CI 回归测试及临时本地补丁包。
  • Relevant dependency/license/security impact is documented and reviewed

此前 CI 的依赖审计发现已处理:brace-expansion 2.1.4 → 2.1.7、fast-uri 3.1.6 → 3.1.8,对 miniflare@5.20260903.0-alpha 定向覆盖 undici 7.29.0 → 7.29.1。直接 Cloudflare / Wrangler 版本不变,三者许可证仍为 MIT;未改审计门槛或工作流权限。

本次 CI 修复将 sharp 更新为 0.35.5、source-map-js 更新为 1.2.2,并将 oxfmt 使用的 tinypool 固定为 2.1.2。braces 的深层嵌套栈溢出尚无官方修复版本,因此暂用私有本地补丁包:从 上游 PR 78 的固定提交逐字节引入运行时代码,保留 MIT 许可证、来源哈希和替换条件,详见 补丁来源说明。两个构建工具调用链均解析到该补丁。

npm 不按 registry 发布包扫描本地链接源码,因此审计 0 告警不能单独证明补丁安全。CI 保留原 --audit-level=high 门槛,并新增通过实际 micromatch 依赖路径运行的深度字符串/AST 回归;旧版本已复现栈溢出,补丁返回受控错误。该补丁来自尚未合并的上游提案,需在官方修复发布后替换。

Update sharp, source-map-js and the oxfmt tinypool dependency. Pin a private local braces fork to the depth-limit patch in upstream PR 78 while no fixed registry release exists, with complete provenance and license metadata.

Keep the audit gate and add reduced-stack regressions through the installed micromatch dependency. Verified npm ci with Node 22.13.0/npm 10.9.2, zero audit findings, 908 upstream tests, static checks, unit/runtime tests, production build, model tools and CI browser flows.
@renyijiu
renyijiu merged commit e06b23b into main Oct 7, 2026
4 checks passed
@renyijiu
renyijiu deleted the codex/performance-runtime-fixes branch October 7, 2026 02:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant