[Perf] Use Set instead of Array for Callback Manager
This commit is contained in:
parent
5df9191ef0
commit
90e445c1b8
@ -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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user