Skip to content

Commit

Permalink
refactor: remove nextNotify field
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsoncodehk committed Jan 11, 2025
1 parent 0f68900 commit 9c319f8
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 22 deletions.
36 changes: 21 additions & 15 deletions benchs/memoryUsage.mjs
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
import { computed, effect, signal } from '../esm/index.mjs';

globalThis.gc();
const start = process.memoryUsage().heapUsed;
let start = process.memoryUsage().heapUsed;

const w = 100;
const h = 100;
const src = signal(1);
const signals = Array.from({ length: 10000 }, () => signal(0));

for (let i = 0; i < w; i++) {
let last = src;
for (let j = 0; j < h; j++) {
const prev = last;
last = computed(() => prev.get() + 1);
}
effect(() => last.get());
}
globalThis.gc();
let end = process.memoryUsage().heapUsed;

console.log(`signal: ${((end - start) / 1024).toFixed(2)} KB`);

start = end;

src.set(src.get() + 1);
const computeds = Array.from({ length: 10000 }, (_, i) => computed(() => signals[i].get() + 1));

globalThis.gc();
const end = process.memoryUsage().heapUsed;
console.log(`Memory Usage: ${((end - start) / 1024).toFixed(2)} KB`);
end = process.memoryUsage().heapUsed;

console.log(`computed: ${((end - start) / 1024).toFixed(2)} KB`);

start = end;

Array.from({ length: 10000 }, (_, i) => effect(() => computeds[i].get()));

globalThis.gc();
end = process.memoryUsage().heapUsed;

console.log(`effect: ${((end - start) / 1024).toFixed(2)} KB`);
2 changes: 0 additions & 2 deletions src/effect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ export function effect<T>(fn: () => T): Effect<T> {
}

export class Effect<T = any> implements IEffect, IDependency {
nextNotify: IEffect | undefined = undefined;

// Dependency
subs: ILink | undefined = undefined;
subsTail: ILink | undefined = undefined;
Expand Down
11 changes: 6 additions & 5 deletions src/system.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
export interface IEffect extends ISubscriber {
nextNotify: IEffect | undefined;
notify(): void;
}

Expand All @@ -26,6 +25,7 @@ export interface ILink {
prevSub: ILink | undefined;
nextSub: ILink | undefined;
// Reuse to link next released link in linkPool
// Reuse to link notify effect in queuedEffects
nextDep: ILink | undefined;
}

Expand All @@ -46,10 +46,11 @@ let linkPool: ILink | undefined;
export function drainQueuedEffects(): void {
while (queuedEffects !== undefined) {
const effect = queuedEffects;
const queuedNext = effect.nextNotify;
const depsTail = effect.depsTail!;
const queuedNext = depsTail.nextDep;
if (queuedNext !== undefined) {
effect.nextNotify = undefined;
queuedEffects = queuedNext;
depsTail.nextDep = undefined;
queuedEffects = queuedNext.sub as IEffect;
} else {
queuedEffects = undefined;
queuedEffectsTail = undefined;
Expand Down Expand Up @@ -170,7 +171,7 @@ export function propagate(link: ILink): void {
}
if ('notify' in sub) {
if (queuedEffectsTail !== undefined) {
queuedEffectsTail.nextNotify = sub;
queuedEffectsTail.depsTail!.nextDep = sub.deps;
} else {
queuedEffects = sub;
}
Expand Down

0 comments on commit 9c319f8

Please sign in to comment.