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