Performance: Removing listeners
This affects memory usage and event handling responsiveness by controlling how many event listeners remain active.
Jump into concepts and practice - no test required
const EventEmitter = require('events'); const emitter = new EventEmitter(); function onData(data) { console.log('Data received:', data); emitter.removeListener('data', onData); // Remove after first use } emitter.once('data', onData); // Automatically removes after one call // ... later in code emitter.emit('data', 'sample');
const EventEmitter = require('events'); const emitter = new EventEmitter(); function onData(data) { console.log('Data received:', data); } // Adding listener multiple times without removal emitter.on('data', onData); emitter.on('data', onData); // Never removing listeners // ... later in code emitter.emit('data', 'sample');
| Pattern | Memory Usage | Event Handling Cost | CPU Overhead | Verdict |
|---|---|---|---|---|
| Multiple listeners without removal | Increases linearly | Multiple handlers run per event | High due to redundant calls | [X] Bad |
| Listeners removed after use | Stable and low | Single handler per event | Low and efficient | [OK] Good |
removeListener or off?myFunc from an event emitter emitter?removeListener method requires the event name and the exact function reference.const EventEmitter = require('events');
const emitter = new EventEmitter();
function greet() { console.log('Hello!'); }
emitter.on('sayHello', greet);
emitter.removeListener('sayHello', greet);
emitter.emit('sayHello');
What will be printed when this code runs?greet is added then removed before emitting.const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('data', () => console.log('Data received'));
emitter.removeListener('data', () => console.log('Data received'));'update'. You want to remove only the listener logUpdate but keep others. Which approach correctly removes only logUpdate?off or removeListener with event name and function reference.off with event and function. emitter.removeAllListeners('update'); removes all listeners, which is not desired.