|
1 | 1 | 'use strict';
|
2 | 2 | const common = require('../common.js');
|
3 |
| -const EventEmitter = require('events').EventEmitter; |
4 |
| -const MathRandom = Math.random; |
| 3 | +const { EventEmitter } = require('events'); |
5 | 4 |
|
6 |
| -const bench = common.createBenchmark(main, { n: [1e6] }); |
| 5 | +const bench = common.createBenchmark(main, { |
| 6 | + newListener: [0, 1], |
| 7 | + removeListener: [0, 1], |
| 8 | + n: [1e6] |
| 9 | +}); |
7 | 10 |
|
8 |
| -function main({ n }) { |
| 11 | +function main({ newListener, removeListener, n }) { |
9 | 12 | const ee = new EventEmitter();
|
10 | 13 | const listeners = [];
|
11 | 14 |
|
12 |
| - for (let i = 0; i < 10; i += 1) { |
13 |
| - const listener = () => {}; |
14 |
| - if ((MathRandom() + .5) >= 1) listener.listener = () => {}; |
15 |
| - listeners.push(listener); |
16 |
| - } |
| 15 | + for (let k = 0; k < 10; k += 1) |
| 16 | + listeners.push(() => {}); |
| 17 | + |
| 18 | + if (newListener === 1) |
| 19 | + ee.on('newListener', (event, listener) => {}); |
17 | 20 |
|
18 |
| - ee.on('newListener', () => {}); |
| 21 | + if (removeListener === 1) |
| 22 | + ee.on('removeListener', (event, listener) => {}); |
19 | 23 |
|
20 | 24 | bench.start();
|
21 | 25 | for (let i = 0; i < n; i += 1) {
|
22 |
| - for (let k = 0; k < listeners.length; k += 1) |
23 |
| - ee.emit('newListener', listeners[k].listener ?? listeners[k]); |
| 26 | + const dummy = (i % 2 === 0) ? 'dummy0' : 'dummy1'; |
| 27 | + for (let k = listeners.length; --k >= 0; /* empty */) { |
| 28 | + ee.on(dummy, listeners[k]); |
| 29 | + } |
| 30 | + for (let k = listeners.length; --k >= 0; /* empty */) { |
| 31 | + ee.removeListener(dummy, listeners[k]); |
| 32 | + } |
24 | 33 | }
|
25 | 34 | bench.end(n);
|
26 | 35 | }
|
0 commit comments