Files
FreeCADWasmDev/docs/current/efficiency-v22-fixes.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

48 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-09-09 效率修复与模块预加载
本次沿用已提供的桌面 FreeCAD 源码、现有独立 WASM 和交付顺序,没有重编译 native、重做 DXF 或缩减完整业务范围。详细基线见 [逐轮耗时](efficiency-v21-review.md) 及同名 JSON。
## 20 轮实测基线
窗口:5280–5299;累计测量 2364.373 秒。事件间隔包含模型、服务、传输与客户端时间,不是纯推理时间;下面的阶段已计入总量,不再加轮间间隔。
| 步骤 | 秒 | 占比 | 处理重点 |
|---|---:|---:|---|
| 读取后无工具间隔 | 437.034 | 18.48% | 复用已有证据与当前工作包,减少无效恢复 |
| 空闲终止 | 429.344 | 18.16% | 脚本编辑不得误判为无编辑 |
| 首次决策 | 394.935 | 16.70% | 有现成有效结果不再启动模型重复实现 |
| 实际编辑区间 | 318.754 | 13.48% | 保留真实修改,不削减业务内容 |
| 后置构建 | 212.733 | 9.00% | 按实际 Worker 对应目标增量构建 |
| CMake 再生成 | 76.204 | 3.22% | 链接参数问题一次预检报全 |
| 实际文件读取 | 2.206 | 0.09% | 不是本窗口主要瓶颈 |
本窗口流式失败 0;11 轮处于恢复流程,累计约 1100.5 秒。不能据此声称网络完全稳定,也不能继续将主要浪费全部归为网络。
## 已完成修复
| 问题及证据 | 改动 | 验证边界 |
|---|---|---|
| 混合通过/失败报告随非零退出被整体打回,已成功业务重复恢复 | `run_business_acceptance.py` 保留逐项成功证据及进程退出码,整体仍返回未完成,只标记剩余项失败 | 成功子集可 `--reuse`,不再次执行;重复 ID、全通过但进程失败、依赖变化仍拒绝 |
| JtReader 5297–5299 分多轮补链接设置,路径中 `-pthread` 被误当选项 | `check_web_link_closure.py` 使用参数解析,缺真实 `-pthread` 和线程池设置一次报全 | 本地预检测试,无需重复实际链接 |
| Fem 5290 脚本已写源码,调度器仍显示 fileChanges=0,最终空闲终止 | 只跟踪本批源码/合同,在工具结束后比较内容;识别后交给原有后置增量流水线 | 脚本修改、创建、删除可识别;纯读取/touch 不计编辑;显式补丁不重复计数;不打断活动工具 |
| 预加载遗漏 manifest 顶层地址;NaN 并发参数造成零下载却 ready | 两个既有预加载入口均兼容顶层/Worker 地址,并归一化并发参数 | 仅所选模块、地址去重、并发不超过 2、失败不报 ready |
## 模块化执行
当前清单 32 个模块条目、34 个独立 WASM,引用文件均存在。继续按功能模块组织;某模块需要多个已有 runtime 时保留实际映射,不强制重链为一个文件。Part 文档与几何分别使用 DocumentProbe、PartBoxProbe。跨独立实例不传 native 指针,主文档状态归属不变。
已有字节缓存预加载参数:`/workbench.html?moduleManifest=/modules/manifest.json&preload=Part,TechDraw`。默认不预加载全部模块;共享产物地址只下载一次。缓存预取不等于 WASM 编译/初始化完成;自动工作台预测预取仍非当前已完成能力。
## 验证与结论
- 218 项 Python 回归通过,耗时 24.606 秒,包含上述三个调度/预检/证据复用修复及原有边界。
- 14 项 Node 预加载/产物测试通过,测试框架报告 0.388 秒;两个预加载入口应用相同用例。
- TypeScript `tsc --noEmit` 通过。
- 补充 33 项调度/逐步计时回归通过,耗时 14.061 秒。构建选择 `--dry-run` 实测 0.65 秒,仅选当前 Part 的既有目标,没有编译。
- 本地 `http://localhost:5180/module-preload.js` 返回 200,确认包含本次两项预加载修复;未为验证缓存预取而下载全部大型 WASM。
- 隔离测试没有请求模型接口、没有执行真实 WASM 编译,也不生成业务完成记录。它们证明修复行为,不能作为完整迁移完成或生产吞吐恢复的证据。
新增 `observedSourceChanges`、`lastChangedSources`、`sourceChangeScanSeconds` 用于显示内容变更检测及自身开销。下一窗口继续用原有逐步骤统计和新增有效业务结果衡量实际收益;不以调度轮数、重启、重复通过或文档更新作为新增交付。
部署快照:2026-09-09 05:31(Asia/Shanghai),旧回合正常结束后由原 watchdog 续启 v22,PID 3047043,第 5304 轮;当前源码 SHA-256 与运行进程状态一致。未强杀当前业务工具。后台继续执行,不能以这一快照宣称全部业务或吞吐恢复。