Appearance
纹理 LRU 缓存
系统概览
纹理 LRU 缓存模块(ADR-189 Phase 1.3),按键 <modelDir>\x00<relativePath> 缓存纹理 ArrayBuffer,避免跨模型切换时重复读取文件。使用基于 Map 插入顺序的近似 LRU 驱逐策略,O(1) 驱逐,无需双向链表。
核心职责
texture-lru.ts— LRU 缓存管理与读取
对外 API(节选)
readTextureWithLRU(modelDir, relativePath, signal?)— 带 LRU 缓存的纹理读取。命中直接返回 ArrayBuffer,未命中则readFileBytes后缓存clearTextureLRU()— 清空 LRU 缓存,在disposeRenderer中调用textureLRUSize()— 返回当前缓存条目数(供测试/监控使用)_resetTextureLRUForTest()— 仅供测试使用,重置缓存状态
与其他子系统关系
- 被
model-loader.ts在加载纹理时调用 - 依赖
@/core/wails-bindings的readFileBytes读取文件 - 释放由
scene.ts的disposeRenderer()触发
不变量
- 缓存键分割符
\x00避免路径中的冒号导致 key 解析歧义 - 最大缓存 150 条目,超限时淘汰最旧插入项
- 命中时更新访问时间 + 重新 set 以更新 Map 插入顺序(最近使用排最后)
- AbortSignal 触发后不入缓存,避免缓存已废弃数据
验证入口
- 间接覆盖:运行时集成测试