用途:解决 ThatOpen 应用处理大型 BIM 模型时的内存泄漏、渲染缓慢、标签页崩溃等性能问题,核心是资源释放与内存管理。
主要能力:
- 释放链管理。FragmentsModel、THREE.Mesh、Material、Texture 均占用 GPU 内存,浏览器垃圾回收不会释放 GPU 资源,必须显式调用 .dispose()。整体销毁用 components.dispose()(内部会最后释放 FragmentsManager);单模型移除用 fragments.disposeModel(modelId);自建 Three.js 对象需自行释放 geometry、material 及其 map、normalMap、aoMap、envMap 等,并先从场景移除。
- 内存泄漏检测。用 Chrome DevTools Memory 面板做堆快照前后对比,关注 BufferGeometry、InstancedBufferAttribute、各类 Material、Texture、WebGLProgram 等残留实例。
- 内存预算参考。小于 1 万元素约 200MB 以内可全量加载;1 万至 10 万约 200–800MB 需过滤 IFC 类;10 万至 50 万约 800MB–2GB 须激进过滤并流式加载;超过 50 万须强制分片流式与模型联邦。浏览器单标签页上限约 Chrome/Firefox 4GB、Safari 3GB、移动端 1–2GB。
- Worker 卸载。用 fragments.init() 传入与已安装 @thatopen/fragments 版本一致的 worker URL,将 FlatBuffers 反序列化、射线检测、getData、位置与包围盒计算、GUID 映射放到 worker,避免主线程卡死。
- BVH 射线检测。ThatOpen 通过 three-mesh-bvh 自动加速,无需手动配置,不要移除或覆盖该补丁。
- 多边形偏移。对高亮与叠加材质设置 polygonOffset = true、polygonOffsetFactor = 1、polygonOffsetUnits = 1,防止 z-fighting 闪烁。
- 大模型策略。IFC 类过滤、IFC 只转换一次后复用 fragments 二进制、按专业或楼层做模型联邦、按需加载与释放。
使用方式:按清单在加载前初始化 worker、配置过滤与预算;运行时控制重渲染频率、谨慎调用重操作;清理时调用 components.dispose()、disposeModel()、手动释放自建对象、移除事件监听与 DOM 引用。
适用场景:ThatOpen 查看器、大模型加载与卸载、多专业模型协同、楼层级按需加载。
限制:资料未提供具体安装命令、收费与平台支持信息;内存数值与浏览器上限为资料给出的参考值,实际以运行环境为准。