2.4 KiB
2.4 KiB
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 解析结果。npm run typecheck和npm run build使用源码/配置指纹。指纹未变化且 构件存在时输出web-typecheck-reused/web-build-reused,不重复启动 TypeScript 或 Vite;任一输入变化都会自动回到完整增量构建路径。- 调度器状态显示为 WASM 构件增加
bytes + mtime_ns指纹缓存;未变化时不再重复读取并计算 SHA-256。 - 状态页从既有收据计算并显示当前阶段中位数最高的观测瓶颈,便于下一轮只调整真正耗时的阶段。
运行契约
优化不关闭验证、不伪造结果,也不改变 WASM 模块的完成预加载与调试模块按需加载策略。WEB_BUILD_JOBS、WEB_ENGINE_FORCE_RECONFIGURE 和 WEB_BUILD_JOBS_CAP 保留为显式运维覆盖项;普通无人值守运行直接复用已有构建目录、Emscripten RAM cache 和 TypeScript 增量状态。