From 942043f0b038849577ac7e63ac9f25910fab0d53 Mon Sep 17 00:00:00 2001 From: YHH <359807859@qq.com> Date: Sat, 11 Oct 2025 18:44:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E5=93=8D=E5=BA=94=E5=BC=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=9A=84=E6=95=B0=E9=87=8F=E8=80=8C=E4=B8=8D?= =?UTF-8?q?=E6=98=AF=E4=BC=A0=E7=BB=9F=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/ECS/Core/QuerySystem.ts | 6 ++++-- packages/core/tests/ECS/Core/QuerySystem.test.ts | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/core/src/ECS/Core/QuerySystem.ts b/packages/core/src/ECS/Core/QuerySystem.ts index ff051cb2..0f11c4c4 100644 --- a/packages/core/src/ECS/Core/QuerySystem.ts +++ b/packages/core/src/ECS/Core/QuerySystem.ts @@ -756,11 +756,13 @@ export class QuerySystem { /** * 清理查询缓存 - * + * * 用于外部调用清理缓存,通常在批量操作后使用。 + * 注意:此方法也会清理响应式查询缓存 */ public clearCache(): void { this.clearQueryCache(); + this.clearReactiveQueries(); } /** @@ -856,7 +858,7 @@ export class QuerySystem { })) }, cacheStats: { - size: this.queryCache.size, + size: this._reactiveQueries.size, hitRate: this.queryStats.totalQueries > 0 ? (this.queryStats.cacheHits / this.queryStats.totalQueries * 100).toFixed(2) + '%' : '0%' } diff --git a/packages/core/tests/ECS/Core/QuerySystem.test.ts b/packages/core/tests/ECS/Core/QuerySystem.test.ts index 163859a0..cb65ba8e 100644 --- a/packages/core/tests/ECS/Core/QuerySystem.test.ts +++ b/packages/core/tests/ECS/Core/QuerySystem.test.ts @@ -449,22 +449,24 @@ describe('QuerySystem - 查询系统测试', () => { expect(parseFloat(stats.cacheStats.hitRate)).toBeLessThanOrEqual(100); }); - test('缓存命中率应该在重复查询时提高', () => { + test('缓存命中率应该在重复查询时保持高命中率', () => { entities[0].addComponent(new PositionComponent(10, 20)); entities[1].addComponent(new PositionComponent(30, 40)); - // 第一次查询(缓存未命中) + // 第一次查询(创建响应式查询缓存) querySystem.queryAll(PositionComponent); let stats = querySystem.getStats(); const initialHitRate = parseFloat(stats.cacheStats.hitRate); - // 重复查询(应该命中缓存) + // 重复查询(应该持续命中响应式查询缓存) for (let i = 0; i < 10; i++) { querySystem.queryAll(PositionComponent); } 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('应该能够清理查询缓存', () => {