0
0
Svelteframework~8 mins

onDestroy in Svelte - Performance & Optimization

Choose your learning style9 modes available
Performance: onDestroy
MEDIUM IMPACT
This affects cleanup timing and memory usage after a component is removed, impacting interaction responsiveness and memory leaks.
Cleaning up event listeners when a Svelte component is removed
Svelte
import { onDestroy } from 'svelte';

const onResize = () => {
  console.log('resize');
};
window.addEventListener('resize', onResize);

onDestroy(() => {
  window.removeEventListener('resize', onResize);
});
Removes event listener when component unmounts, freeing memory and reducing CPU work.
📈 Performance GainPrevents memory leaks and reduces unnecessary event processing, improving INP.
Cleaning up event listeners when a Svelte component is removed
Svelte
import { onDestroy } from 'svelte';

// No cleanup of event listener
window.addEventListener('resize', () => {
  console.log('resize');
});
Event listener stays active after component unmounts, causing memory leaks and unnecessary CPU usage.
📉 Performance CostIncreases memory usage over time; can cause slow interaction (INP) due to unnecessary event handling.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
No cleanup in onDestroyNo change00[X] Bad
Proper cleanup with onDestroyNo change00[OK] Good
Rendering Pipeline
onDestroy runs cleanup code after the component is removed from the DOM, preventing leftover listeners or timers that could cause extra work during interaction.
Interaction Handling
Memory Management
⚠️ BottleneckMemory leaks from leftover event listeners or timers
Core Web Vital Affected
INP
This affects cleanup timing and memory usage after a component is removed, impacting interaction responsiveness and memory leaks.
Optimization Tips
1Always remove event listeners and timers in onDestroy to prevent memory leaks.
2Use onDestroy to free resources immediately after component unmount.
3Proper cleanup improves interaction responsiveness and avoids slowdowns.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance benefit of using onDestroy in a Svelte component?
AIt cleans up resources to prevent memory leaks and improve interaction responsiveness.
BIt speeds up the initial page load by delaying component creation.
CIt reduces the number of DOM nodes created during rendering.
DIt automatically caches component data for faster re-renders.
DevTools: Performance
How to check: Record a session while mounting and unmounting the component. Look for increasing memory usage or long tasks after unmount.
What to look for: Memory graph should not steadily increase after unmount; no long tasks related to leftover event handlers.