Summary
Nodes removed from document but referenced in JS prevent GC — classic memory leak in SPAs (closures holding elements, forgotten listeners). WeakMap patterns or explicit cleanup in effects. DevTools Memory heap snapshot → Detached nodes count. Common in chart libraries, modals, infinite scroll without teardown.
Code example
const cache = new WeakMap();
function mountWidget(container) {
const widget = createWidget(container);
cache.set(container, widget);
return () => {
widget.destroy();
cache.delete(container);
};
}
Key points
- Nodes removed from document but referenced in JS prevent GC — classic memory leak in SPAs (closures holding elements, forgotten listeners).
- WeakMap patterns or explicit cleanup in effects.
- DevTools Memory heap snapshot → Detached nodes count.
- Common in chart libraries, modals, infinite scroll without teardown.