Skip to content

Commit 1be4474

Browse files
committed
perf(useRegistrar): add directory for lookup
1 parent 7cd3baf commit 1be4474

File tree

1 file changed

+14
-7
lines changed
  • packages/0/src/composables/useRegistrar

1 file changed

+14
-7
lines changed

packages/0/src/composables/useRegistrar/index.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export interface RegistrarTicket {
2020
export interface RegistrarContext {
2121
tickets: Reactive<Map<ID, Reactive<any>>>
2222
lookup: (index: number) => ID | undefined
23-
register: (ticket: Partial<RegistrarTicket>, id?: ID) => Reactive<any>
23+
register: (ticket?: Partial<RegistrarTicket>, id?: ID) => Reactive<any>
2424
unregister: (id: ID) => void
2525
reindex: () => void
2626
}
@@ -42,18 +42,19 @@ export function useRegistrar<
4242
const [useRegistrarContext, _provideRegistrarContext] = createContext<E>(namespace)
4343

4444
const tickets = reactive(new Map<ID, Z>())
45+
const directory = reactive(new Map<number, ID>())
4546

4647
function lookup (index: number) {
47-
for (const [id, item] of tickets) {
48-
if (item.index === index) return id
49-
}
50-
return undefined
48+
return directory.get(index)
5149
}
5250

5351
function reindex () {
52+
directory.clear()
5453
let index = 0
5554
for (const item of tickets.values()) {
56-
item.index = index++
55+
item.index = index
56+
directory.set(index, item.id)
57+
index++
5758
}
5859
}
5960

@@ -65,12 +66,18 @@ export function useRegistrar<
6566
}) as Reactive<Z>
6667

6768
tickets.set(item.id, item as any)
69+
directory.set(item.index, item.id)
6870

6971
return item
7072
}
7173

7274
function unregister (id: ID) {
73-
tickets.delete(id)
75+
const item = tickets.get(id)
76+
77+
if (!item) return
78+
79+
directory.delete(item.index)
80+
tickets.delete(item.id)
7481
reindex()
7582
}
7683

0 commit comments

Comments
 (0)