diff --git a/bench/index.ts b/bench/index.ts index 72da475..73942bf 100644 --- a/bench/index.ts +++ b/bench/index.ts @@ -1,11 +1,15 @@ import { Bench } from "tinybench"; -const bench = new Bench({ name: "", time: 1000 }); +const bench = new Bench({ name: "bench", time: 1000 }); let sink = 0; -bench.add("", () => { - sink += 1; -}); +bench + .add("a", () => { + sink++; + }) + .add("b", () => { + sink++; + }); await bench.run(); diff --git a/engine/lib/Signal.ts b/engine/lib/Signal.ts index 6516467..69f9dd1 100644 --- a/engine/lib/Signal.ts +++ b/engine/lib/Signal.ts @@ -4,22 +4,17 @@ let current: Current = null; export function createSignal(value: T): [() => T, (value: T) => void] { let innerValue = value; - const observers: Array = []; - const indices = new Map(); + const observers = new Set<() => void>(); const getter = () => { - if (current !== null && !indices.has(current)) { - observers.push(current); - indices.set(current, observers.length); - } - + current !== null && observers.add(current); return innerValue; }; const setter = (value: T) => { innerValue = value; - for (let i = 0; i < observers.length; i++) { - observers[i]!(); + for (const observer of observers) { + observer(); } };