[Perf] Use Set instead of Array for Callback Manager

This commit is contained in:
Alexander Zinchuk 2023-03-30 20:29:09 -05:00
parent 5df9191ef0
commit 90e445c1b8

View File

@ -1,8 +1,8 @@
export function createCallbackManager() {
const callbacks: AnyToVoidFunction[] = [];
const callbacks = new Set<AnyToVoidFunction>();
function addCallback(cb: AnyToVoidFunction) {
callbacks.push(cb);
callbacks.add(cb);
return () => {
removeCallback(cb);
@ -10,10 +10,7 @@ export function createCallbackManager() {
}
function removeCallback(cb: AnyToVoidFunction) {
const index = callbacks.indexOf(cb);
if (index !== -1) {
callbacks.splice(index, 1);
}
callbacks.delete(cb);
}
function runCallbacks(...args: any[]) {
@ -23,7 +20,7 @@ export function createCallbackManager() {
}
function hasCallbacks() {
return Boolean(callbacks.length);
return Boolean(callbacks.size);
}
return {