Files
workinf_Blender_Wasm/docs/WEB_BUILD_EXECUTION_OPTIMIZATION.md
mes123456 ed347098b4
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
perf(web): skip unchanged incremental web builds
2026-09-06 10:46:53 +08:00

2.4 KiB
Raw Permalink Blame History

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 增量状态。