diff options
Diffstat (limited to 'bench/snippets')
-rwxr-xr-x | bench/snippets/bun.lockb | bin | 0 -> 1477 bytes | |||
-rw-r--r-- | bench/snippets/emitter.mjs | 101 | ||||
-rw-r--r-- | bench/snippets/package.json | 7 |
3 files changed, 108 insertions, 0 deletions
diff --git a/bench/snippets/bun.lockb b/bench/snippets/bun.lockb Binary files differnew file mode 100755 index 000000000..3acb6d075 --- /dev/null +++ b/bench/snippets/bun.lockb diff --git a/bench/snippets/emitter.mjs b/bench/snippets/emitter.mjs new file mode 100644 index 000000000..f708cf77a --- /dev/null +++ b/bench/snippets/emitter.mjs @@ -0,0 +1,101 @@ +// **so this file can run in node** +import { createRequire } from "node:module"; +const require = createRequire(import.meta.url); +// -- + +const EventEmitterNative = require("node:events").EventEmitter; +const TypedEmitter = require("tiny-typed-emitter").TypedEmitter; +const EventEmitter3 = require("eventemitter3").EventEmitter; +import { bench, run } from "../../node_modules/mitata/src/cli.mjs"; +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(); diff --git a/bench/snippets/package.json b/bench/snippets/package.json new file mode 100644 index 000000000..6244001a8 --- /dev/null +++ b/bench/snippets/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "eventemitter3": "^5.0.0", + "tiny-typed-emitter": "latest" + }, + "prettier": "../../.prettierrc.cjs" +} |