Skip to content

Commit 13dcb36

Browse files
author
scl
committed
perf(query-core): useQueries have quadratic performance in relation to the number of queries(#8604)
1 parent e474f73 commit 13dcb36

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

packages/query-core/src/queriesObserver.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export class QueriesObserver<
4444
#lastCombine?: CombineFn<TCombinedResult>
4545
#lastResult?: Array<QueryObserverResult>
4646
#observerMatches: Array<QueryObserverMatch> = []
47+
#observerMap: Map<QueryObserver, number> = new Map()
4748

4849
constructor(
4950
client: QueryClient,
@@ -82,6 +83,7 @@ export class QueriesObserver<
8283
this.#observers.forEach((observer) => {
8384
observer.destroy()
8485
})
86+
this.#observerMap.clear()
8587
}
8688

8789
setQueries(
@@ -130,6 +132,11 @@ export class QueriesObserver<
130132
this.#observers = newObservers
131133
this.#result = newResult
132134

135+
this.#observerMap.clear()
136+
newObservers.forEach((observer, index) => {
137+
this.#observerMap.set(observer, index)
138+
})
139+
133140
if (!this.hasListeners()) {
134141
return
135142
}
@@ -253,8 +260,8 @@ export class QueriesObserver<
253260
}
254261

255262
#onUpdate(observer: QueryObserver, result: QueryObserverResult): void {
256-
const index = this.#observers.indexOf(observer)
257-
if (index !== -1) {
263+
const index = this.#observerMap.get(observer)
264+
if (index !== undefined) {
258265
this.#result = replaceAt(this.#result, index, result)
259266
this.#notify()
260267
}

0 commit comments

Comments
 (0)