Dev.Lib
arrow_backBack to Blogs
LEVEL_033.9June 27, 20261 min read

Detached DOM nodes

Browser Performance

Nodes removed from document but referenced in JS prevent GC — classic memory leak in SPAs (closures holding elements, forgotten listeners).

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.

Further reading

Related concepts