第 17 章:缓存系统
VFP 的缓存系统允许性能数据随资产分发,同时保证它们不会篡改资产语义。缓存包括 MSH0、VBUF、PMSH、RND0、ANM0、BORD、PRVW 和 THMB;它们均依赖权威数据并可被替换、删除或重建。
17.1 有效性条件
一个缓存区段只有同时满足下列条件时才有效:
- Directory Entry、Payload 长度、CRC32 和内部布局有效;
- 该区段版本被读取器支持;
- 作用范围的 Chunk ID 或全局引用存在;
- 缓存关联的 Source Hash 与 META 中当前 Source Hash 匹配;
- 缓存中的索引、范围和依赖数据未越界;
- 读取器支持该缓存的解释规则。
不满足任一条件时,读取器必须将缓存视为无效,而不是尝试以宽容方式修补几何或颜色。
17.2 失效传播
| 权威修改 | 必须失效的缓存 |
|---|---|
| 单个 Chunk 内部体素改变 | 该 Chunk 的 MSH0、VBUF、PMSH;相关 RND0、BORD、PRVW、THMB |
| Chunk 边界体素改变 | 该 Chunk 及所有共享边界邻居的 MSH0、VBUF、PMSH、BORD;相关 RND0、PRVW、THMB |
| PAL0 任意条目改变 | 全部颜色相关 VBUF、PMSH、RND0、BORD、PRVW、THMB |
| Chunk 结构或 META 尺寸改变 | 全部缓存 |
| 仅 SCNE 改变 | 仅展示预览和依赖 SCNE 的渲染缓存 |
Source Hash 是全资产级标识,因此任何权威修改都会使所有携带旧完整 Hash 的缓存整体过期。实现可以额外维护局部 Chunk Hash 以优化重建,但该扩展不得替代全局 Source Hash 校验。
17.3 重建与存储策略
读取器可选择即时重建、后台重建、按需重建或直接忽略缓存。写入器可在保存时打包全部缓存、仅打包编辑缓存、仅打包运行缓存或不打包任何缓存。无论策略如何,最小 VFP 必须能仅凭权威区段恢复。
追加式保存时,写入器可以保留旧缓存和旧 Directory,但新 Directory 不应再引用已失效缓存。垃圾回收、重新打包和去重是实现策略,不改变文件语义。
本章总结
缓存是可验证的性能层,而不是第二份资产源。它们的正确生命周期是:由权威数据生成、通过 Hash 验证、在权威变更后失效、必要时重建。