报告响应式查询的数量而不是传统缓存

This commit is contained in:
YHH
2025-10-11 18:44:55 +08:00
parent 23d81bca35
commit 942043f0b0
2 changed files with 10 additions and 6 deletions

View File

@@ -758,9 +758,11 @@ export class QuerySystem {
* 清理查询缓存 * 清理查询缓存
* *
* 用于外部调用清理缓存,通常在批量操作后使用。 * 用于外部调用清理缓存,通常在批量操作后使用。
* 注意:此方法也会清理响应式查询缓存
*/ */
public clearCache(): void { public clearCache(): void {
this.clearQueryCache(); this.clearQueryCache();
this.clearReactiveQueries();
} }
/** /**
@@ -856,7 +858,7 @@ export class QuerySystem {
})) }))
}, },
cacheStats: { cacheStats: {
size: this.queryCache.size, size: this._reactiveQueries.size,
hitRate: this.queryStats.totalQueries > 0 ? hitRate: this.queryStats.totalQueries > 0 ?
(this.queryStats.cacheHits / this.queryStats.totalQueries * 100).toFixed(2) + '%' : '0%' (this.queryStats.cacheHits / this.queryStats.totalQueries * 100).toFixed(2) + '%' : '0%'
} }

View File

@@ -449,22 +449,24 @@ describe('QuerySystem - 查询系统测试', () => {
expect(parseFloat(stats.cacheStats.hitRate)).toBeLessThanOrEqual(100); expect(parseFloat(stats.cacheStats.hitRate)).toBeLessThanOrEqual(100);
}); });
test('缓存命中率应该在重复查询时提高', () => { test('缓存命中率应该在重复查询时保持高命中率', () => {
entities[0].addComponent(new PositionComponent(10, 20)); entities[0].addComponent(new PositionComponent(10, 20));
entities[1].addComponent(new PositionComponent(30, 40)); entities[1].addComponent(new PositionComponent(30, 40));
// 第一次查询(缓存未命中) // 第一次查询(创建响应式查询缓存)
querySystem.queryAll(PositionComponent); querySystem.queryAll(PositionComponent);
let stats = querySystem.getStats(); let stats = querySystem.getStats();
const initialHitRate = parseFloat(stats.cacheStats.hitRate); const initialHitRate = parseFloat(stats.cacheStats.hitRate);
// 重复查询应该命中缓存 // 重复查询(应该持续命中响应式查询缓存)
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
querySystem.queryAll(PositionComponent); querySystem.queryAll(PositionComponent);
} }
stats = querySystem.getStats(); stats = querySystem.getStats();
expect(parseFloat(stats.cacheStats.hitRate)).toBeGreaterThan(initialHitRate); // 响应式查询永远100%命中,这是期望的优化效果
expect(parseFloat(stats.cacheStats.hitRate)).toBeGreaterThanOrEqual(initialHitRate);
expect(parseFloat(stats.cacheStats.hitRate)).toBe(100);
}); });
test('应该能够清理查询缓存', () => { test('应该能够清理查询缓存', () => {