javascript / expert
Snippet
WeakRef-basierte Garbage-Collection-Verfolgung für Objektinstanzen in Svelte-Aktionen
Die Verwendung objektorientierter Wrapper um JS WeakRef und FinalizationRegistry garantiert eine speichersichere Verfolgung von DOM-Elementinstanzen in Svelte-Knoten-Aktionsdirektiven.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
export class ElementRegistry {#refs = new Set();#finalizer = new FinalizationRegistry(id => {console.log(`Resource ${id} collected by GC`);});register(instance, id) {const ref = new WeakRef(instance);this.#refs.add(ref);this.#finalizer.register(instance, id, ref);}getActiveCount() {let active = 0;for (const ref of this.#refs) {if (ref.deref()) active++;}return active;}}export function trackAction(node, registryInstance) {registryInstance.register(node, node.id || 'unnamed');return {destroy() {// Cleanup action bindings}};}
svelte
Erklärung
1
export class ElementRegistry {
Definiert eine OOP-Manager-Klasse zur speicherbereinigungsbewussten Instanzverfolgung.
2
#finalizer = new FinalizationRegistry(id => {
Instanziiert eine native FinalizationRegistry zur Überwachung der Speicherbereinigung.
3
const ref = new WeakRef(instance);
Erstellt eine schwache Referenz auf das DOM-Element, was ungestörte GC-Reinigung erlaubt.
4
if (ref.deref()) active++;
Versucht Dereferenzierung zur sicheren Prüfung der Objekt-Existenz ohne Verhindern der GC.