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