Performance Optimization & Memory Management
Performance questions are common in senior-level interviews, especially at product companies.
Memoization
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
const fib = memoize(function(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
});
Memory Leaks
Common causes:
- Forgotten timers/intervals
- Unreleased event listeners
- Closures holding large data
- Detached DOM nodes still referenced
- Accidental global variables (without var/let/const)
// Memory leak: interval runs forever
const id = setInterval(() => { /* work */ }, 1000);
// Fix:
clearInterval(id);
// Memory leak: event listener never removed
btn.addEventListener('click', handler);
// Fix:
btn.removeEventListener('click', handler);
WeakMap & WeakSet
WeakMap/WeakSet hold weak references — their keys/values can be garbage collected if no other reference exists. Ideal for caching without preventing GC.