aboutsummaryrefslogtreecommitdiff
path: root/bench/emitter/microbench.mjs
blob: eae59d4c19e313b31a375e4941752a71cff74f11 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { bench, run } from "mitata";
import { groupForEmitter } from "./implementations.mjs";

var id = 0;

groupForEmitter("single emit", ({ EventEmitter, name }) => {
  const emitter = new EventEmitter();

  emitter.on("hello", event => {
    event.preventDefault();
  });

  bench(name, () => {
    emitter.emit("hello", {
      preventDefault() {
        id++;
      },
    });
  });
});

groupForEmitter("on x 10_000 (handler)", ({ EventEmitter, name }) => {
  const emitter = new EventEmitter();

  bench(name, () => {
    var cb = event => {
      event.preventDefault();
    };
    emitter.on("hey", cb);
    var called = false;
    for (let i = 0; i < 10_000; i++)
      emitter.emit("hey", {
        preventDefault() {
          id++;
          called = true;
        },
      });

    if (!called) throw new Error("not called");
  });
});

// for (let { impl: EventEmitter, name, monkey } of []) {
//   if (monkey) {
//     var monkeyEmitter = Object.assign({}, EventEmitter.prototype);
//     monkeyEmitter.on("hello", event => {
//       event.preventDefault();
//     });

//     bench(`[monkey] ${className}.emit`, () => {
//       var called = false;
//       monkeyEmitter.emit("hello", {
//         preventDefault() {
//           id++;
//           called = true;
//         },
//       });

//       if (!called) {
//         throw new Error("monkey failed");
//       }
//     });

//     bench(`[monkey] ${className}.on x 10_000 (handler)`, () => {
//       var cb = () => {
//         event.preventDefault();
//       };
//       monkeyEmitter.on("hey", cb);
//       for (let i = 0; i < 10_000; i++)
//         monkey.emit("hey", {
//           preventDefault() {
//             id++;
//           },
//         });
//       monkeyEmitter.off("hey", cb);
//     });
//   }
// }

// var target = new EventTarget();
// target.addEventListener("hello", event => {});
// bench("EventTarget.dispatch", () => {
//   target.dispatchEvent(event);
// });

// var hey = new Event("hey");

// bench("EventTarget.on x 10_000 (handler)", () => {
//   var handler = event => {};
//   target.addEventListener("hey", handler);

//   for (let i = 0; i < 10_000; i++) target.dispatchEvent(hey);
//   target.removeEventListener("hey", handler);
// });

await run();