Cleanup patterns
Timers
Section titled “Timers”const id = setInterval(fn, 1000);clearInterval(id);Framework: return cleanup from useEffect, onUnmounted, destroy().
Event listeners
Section titled “Event listeners”const ctrl = new AbortController();el.addEventListener('click', onClick, { signal: ctrl.signal });// later:ctrl.abort();Observers
Section titled “Observers”const observer = new MutationObserver(callback);observer.observe(target, options);observer.disconnect();Node servers
Section titled “Node servers”process.on('SIGTERM', async () => { server.close(); await pool.end(); clearInterval(metricsInterval);});flowchart LR mount[Component mount] --> attach[Attach listeners timers] attach --> unmount[Component unmount] unmount --> cleanup[Cleanup all handles]
Checklist per feature
Section titled “Checklist per feature”- Every
setIntervalhas owner +clearInterval - Every
addEventListenerhas removal path - Every
fetchhasAbortControlleron unmount - Every open stream/socket has
close/destroy