3.8 KiB
3.8 KiB
H5 模型加载缓存 Network 验证记录
日期:2026-07-02
验证范围
- 项目:
frontend-miniapp - 数据源模式:
VITE_DATA_SOURCE_MODE=sdk - 渲染方式:H5 现有 ThreeMap 本地渲染
- 验证工具:Playwright + 本机 Chrome Network 请求监听
- 启动命令:
pnpm dev:h5 - 访问地址:
http://localhost:5174/(5173被占用后由 Vite 自动切换)
本次验证未启用 SGS SDK iframe 渲染,SDK 仍只作为数据/API 来源。
操作路径
- 首次进入馆内 3D,加载默认全楼/外观模型。
- 点击“馆内”进入默认 1F 单楼层模型。
- 从单楼层切换到多楼层。
- 再切回 1F 单楼层。
- 打开搜索页,选择“服务台”结果,进入设施详情并触发点位 focus。
- 离开到“讲解”tab,再回到“馆内”地图。
问题复现
在 GuideModelLoadManager 默认 maxEntries=4 时,单层进入后再切换多层,已加载过的模型会被 LRU 提前淘汰,导致同一 GLB 再次请求:
| 模型 | 切多层前请求次数 | 切多层后请求次数 |
|---|---|---|
L1_draco.glb |
1 | 2 |
L1.5_draco.glb |
1 | 2 |
L-1_draco.glb |
1 | 2 |
根因分类:LRU source cache 容量过小。当前 SDK 数据包含 8 个可导览楼层,多层加载会顺序触达多个 GLB;maxEntries=4 无法覆盖单层、相邻预加载、多层展开和全楼模型的运行期复用需求。
修复
已在 src/services/model/GuideModelLoadManager.ts 将默认 source cache 容量调整为 10,用于覆盖:
- 当前 8 个可导览楼层模型;
- 全楼/外观模型;
- 相邻楼层预加载余量。
ThreeMap.vue 普通 onUnmounted / disposeScene 未调用 guideModelLoadManager.clearAll(),运行期组件重建不会清空全局 source cache。
修复后 Network 统计
修复后重新执行同一路径,关键 GLB 请求次数如下:
| 模型 URL | 进入单层后 | 切多层后 | 切回单层后 | 点位/详情 focus 后 | 讲解 tab 返回馆内后 |
|---|---|---|---|---|---|
/museum-assets/optimized/20260617/draco_EXTERIOR.glb_1781708354536.glb |
1 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L1_draco.glb |
1 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L1.5_draco.glb |
1 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L-1_draco.glb |
1 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L5_draco.glb |
0 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L4_draco.glb |
0 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L3_draco.glb |
0 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L2_draco.glb |
0 | 1 | 1 | 1 | 1 |
/app-api/gis/sdk/minio/museum-assets/sgs-map/glb/1/V20260627093736_e73e3/models/L-2_draco.glb |
0 | 1 | 1 | 1 | 1 |
结论:同一个实际 GLB 在运行期全局缓存有效范围内不再重复发起网络请求。
质量验证
pnpm type-check:通过pnpm lint:通过pnpm build:h5:通过,仅有既有 Sass deprecation warnings
剩余风险
- 运行期内存缓存无法跨页面刷新;刷新页面后重新请求 GLB 属于预期行为。
maxEntries=10会比4保留更多 GLB source,移动端内存需在真机上继续观察。- 如果
/app-api/gis/sdk/minio/...或后端/gis/sdk/minio偶发 500,仍需继续排查smart-navigation-system的 MinIO 代理层。 - 本轮未新增 Service Worker / Cache-Control 持久缓存策略;如需跨刷新复用,应作为后续专项处理。