javascript / expert
Snippet
Verfolgung der Garbage Collection von Action-Zielknoten mittels WeakRef und FinalizationRegistry
Diese Svelte-Action verwendet WeakRef und FinalizationRegistry von JavaScript, um den Lebenszyklus und die Garbage Collection von DOM-Knoten zu überwachen, ohne starke Referenzen zu halten, die Speicherlecks verursachen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export function gcTrackedAction(node, options = {}) {let ref = new WeakRef(node);const registry = new FinalizationRegistry((heldValue) => {options.onGarbageCollected?.(heldValue);});registry.register(node, options.id || 'unnamed-node');return {destroy() {const target = ref.deref();if (target) {registry.unregister(node);}ref = null;}};}
svelte
Erklärung
1
let ref = new WeakRef(node);
Erstellt eine schwache Referenz auf den DOM-Knoten, damit die Garbage Collection nicht behindert wird.
2
const registry = new FinalizationRegistry((heldValue) => {
Instanziiert einen Bereinigungs-Tracker, der ein Callback ausführt, sobald das Objekt freigegeben wird.
3
registry.register(node, options.id || 'unnamed-node');
Registriert den HTML-Knoten mit zugehörigen Metadaten zur Speicherüberwachung.
4
const target = ref.deref();
Prüft sicher, ob der Ziel-DOM-Knoten vor dem Abbau noch im Speicher existiert.