Files
frontend-miniapp/docs/QA/h5-model-cache-network-verification-2026-07-02.md

3.8 KiB
Raw Blame History

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 来源。

操作路径

  1. 首次进入馆内 3D加载默认全楼/外观模型。
  2. 点击“馆内”进入默认 1F 单楼层模型。
  3. 从单楼层切换到多楼层。
  4. 再切回 1F 单楼层。
  5. 打开搜索页,选择“服务台”结果,进入设施详情并触发点位 focus。
  6. 离开到“讲解”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 个可导览楼层,多层加载会顺序触达多个 GLBmaxEntries=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 持久缓存策略;如需跨刷新复用,应作为后续专项处理。