javascript / expert
Snippet
WeakRef und FinalizationRegistry zur Cache-Bereinigungsverfolgung in Next.js Server Components
Die Kombination von WeakRef und FinalizationRegistry ermöglicht Caches in Next.js Server Components, Objektreferenzen zu halten, ohne die Garbage Collection zu blockieren, und benachrichtigt bei der Freigabe von Speicher.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const registry = new FinalizationRegistry((heldKey) => {console.warn(`[GC Eviction] Memory released for key: ${heldKey}`);});const serverCache = new Map();export function setTrackedCache(key, heavyObject) {const ref = new WeakRef(heavyObject);serverCache.set(key, ref);registry.register(heavyObject, key);}export function getTrackedCache(key) {const ref = serverCache.get(key);return ref ? ref.deref() : undefined;}
nextjs
Erklärung
1
const ref = new WeakRef(heavyObject);
Erstellt eine schwache Referenz um ein Objekt, damit dieses regulär durch die Garbage Collection bereinigt werden kann.
2
registry.register(heavyObject, key);
Registriert ein Bereinigungs-Target, das asynchron ausgelöst wird, sobald das Objekt vom Garbage Collector entfernt wird.
3
return ref ? ref.deref() : undefined;
Versucht das Zielobjekt aufzulösen; gibt undefined zurück, falls der Speicher durch die Engine bereits freigegeben wurde.