Performance: Common memory leak patterns
HIGH IMPACT
This affects the server's memory usage over time, leading to slower response times and potential crashes.
const EventEmitter = require('events'); const emitter = new EventEmitter(); function onRequest(data) { console.log('Request received:', data); } // Add listener once outside request handler emitter.on('request', onRequest); function handleRequest(data) { emitter.emit('request', data); } handleRequest('data1'); handleRequest('data2');
const EventEmitter = require('events'); const emitter = new EventEmitter(); function onRequest(data) { console.log('Request received:', data); } // Adding listener on every request without removing function handleRequest(data) { emitter.on('request', onRequest); emitter.emit('request', data); } // Simulate multiple requests handleRequest('data1'); handleRequest('data2');
| Pattern | Memory Usage | Garbage Collection | Server Responsiveness | Verdict |
|---|---|---|---|---|
| Adding event listeners repeatedly | Grows with requests | Increases GC frequency | Degrades over time | [X] Bad |
| Adding event listener once | Stable | Minimal GC impact | Consistent | [OK] Good |
| Unbounded global cache | Grows indefinitely | High GC overhead | Slows server | [X] Bad |
| Limited cache size | Stable | Low GC overhead | Stable performance | [OK] Good |
| Closure capturing large objects | High memory retained | GC delayed | Slower event loop | [X] Bad |
| Avoid closure capture | Memory freed quickly | Efficient GC | Responsive server | [OK] Good |