const EventEmitterNative = require("events").EventEmitter; const TypedEmitter = require("tiny-typed-emitter").TypedEmitter; const EventEmitter3 = require("eventemitter3").EventEmitter; import { bench, run } from "mitata"; const event = new Event("hello"); var id = 0; for (let [EventEmitter, className] of [ [EventEmitterNative, "EventEmitter"], [TypedEmitter, "TypedEmitter"], [EventEmitter3, "EventEmitter3"], ]) { const emitter = new EventEmitter(); emitter.on("hello", (event) => { event.preventDefault(); }); bench(`${className}.emit`, () => { emitter.emit("hello", { preventDefault() { id++; }, }); }); bench(`${className}.on x 10_000 (handler)`, () => { 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; }, }); emitter.off("hey", cb); if (!called) throw new Error("not called"); }); if (EventEmitter !== EventEmitter3) { var monkey = Object.assign({}, EventEmitter.prototype); monkey.on("hello", (event) => { event.preventDefault(); }); bench(`[monkey] ${className}.emit`, () => { var called = false; monkey.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(); }; monkey.on("hey", cb); for (let i = 0; i < 10_000; i++) monkey.emit("hey", { preventDefault() { id++; }, }); monkey.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();