From 5f51b4adea35173bbe556fbad041a5485fd8ad10 Mon Sep 17 00:00:00 2001 From: joseph0926 Date: Sun, 20 Jul 2025 11:41:22 +0900 Subject: [PATCH] perf(query-core/queriesObserver): replace indexOf with WeakMap for O(1) observer lookup --- packages/query-core/src/queriesObserver.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/query-core/src/queriesObserver.ts b/packages/query-core/src/queriesObserver.ts index 853e490abd6..b3e426f6b12 100644 --- a/packages/query-core/src/queriesObserver.ts +++ b/packages/query-core/src/queriesObserver.ts @@ -44,6 +44,7 @@ export class QueriesObserver< #lastCombine?: CombineFn #lastResult?: Array #observerMatches: Array = [] + #indexMap: WeakMap = new WeakMap() constructor( client: QueryClient, @@ -129,6 +130,11 @@ export class QueriesObserver< this.#observers = newObservers this.#result = newResult + this.#indexMap = new WeakMap() + newObservers.forEach((observer, index) => { + this.#indexMap.set(observer, index) + }) + if (!this.hasListeners()) { return } @@ -252,8 +258,8 @@ export class QueriesObserver< } #onUpdate(observer: QueryObserver, result: QueryObserverResult): void { - const index = this.#observers.indexOf(observer) - if (index !== -1) { + const index = this.#indexMap.get(observer) + if (index !== undefined) { this.#result = replaceAt(this.#result, index, result) this.#notify() }