perf(web): reuse incremental build and status caches
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-09-06 10:27:26 +08:00
parent 1184a51ddf
commit 6090995999
9 changed files with 131 additions and 11 deletions

View File

@@ -0,0 +1,31 @@
# Web Blender 编译与无人值守执行优化
## 已定位的耗时来源
最近 `294` 个成功模块收据显示,单轮固定阶段的中位耗时约为:
| 阶段 | 中位耗时 | 结论 |
| --- | ---: | --- |
| WebEngine 增量构建/安装 | 1.1s | 主要由构件复制和切分组成;保留 Ninja 增量状态后可避免无谓重新配置 |
| TypeScript 类型检查 | 3.3s | 与 `npm run build` 内的 `tsc` 重复,启用 `.tsbuildinfo` 后后续调用复用图状态 |
| Vite 生产打包 | 3.9s | 当前固定阶段中位数最高;依赖 Vite 自身缓存和增量输入 |
| 聚焦 Chromium 命令 | 2.9s | 只在明确的后续验收阶段执行,不进入实现回合 |
单次准备上下文和失败账本此前已低于 1 秒,因此继续压缩它们的收益小于消除重复类型检查、CMake fresh 配置和固定 `-j8` 的收益。
## 已实施的快路径
- `build-web-engine-variants.sh` 默认使用 CMake/Ninja 增量配置;只有设置
`WEB_ENGINE_FORCE_RECONFIGURE=1` 才使用 `--fresh`。
- 新增 `tools/web/compute-build-jobs.sh`,根据 CPU 数量和
`MemAvailable` 计算并行度。可通过 `WEB_BUILD_JOBS` 覆盖;默认按每个
WebEngine 编译任务 4 GiB、原生 Blender 编译任务 6 GiB 估算,并限制最大并发。
- Emscripten 环境、无人值守启动器和原生构建入口统一使用自适应并行度,避免在高配机器上固定 `-j8` 或 `-j2`。
- `web/tsconfig.json` 开启增量图和 `.cache/tsconfig.tsbuildinfo`,使独立
`typecheck` 与后续 `build` 共享 TypeScript 解析结果。
- 调度器状态显示为 WASM 构件增加 `bytes + mtime_ns` 指纹缓存;未变化时不再重复读取并计算 SHA-256。
- 状态页从既有收据计算并显示当前阶段中位数最高的观测瓶颈,便于下一轮只调整真正耗时的阶段。
## 运行契约
优化不关闭验证、不伪造结果,也不改变 WASM 模块的完成预加载与调试模块按需加载策略。`WEB_BUILD_JOBS`、`WEB_ENGINE_FORCE_RECONFIGURE` 和 `WEB_BUILD_JOBS_CAP` 保留为显式运维覆盖项;普通无人值守运行直接复用已有构建目录、Emscripten RAM cache 和 TypeScript 增量状态。