aboutsummaryrefslogtreecommitdiff
path: root/bench
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-21 07:16:23 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-21 07:16:23 -0700
commita4d0a1961abe0c6073e15cc6f7c0601b74f2e3f7 (patch)
treeb0b2f0debda72afe5349b46872e7c508b2f81b94 /bench
parent143ccdbeb6988bef73f0a465566c900b62e96103 (diff)
downloadbun-a4d0a1961abe0c6073e15cc6f7c0601b74f2e3f7.tar.gz
bun-a4d0a1961abe0c6073e15cc6f7c0601b74f2e3f7.tar.zst
bun-a4d0a1961abe0c6073e15cc6f7c0601b74f2e3f7.zip
Revert "implement `node:events` in javascript (#2604)"
This reverts commit 96a2ed1040d5a0ca51ae41267cba4f8e5d0a6142.
Diffstat (limited to 'bench')
-rwxr-xr-xbench/bun.lockbbin35848 -> 34640 bytes
-rw-r--r--bench/emitter/implementations.mjs31
-rw-r--r--bench/emitter/microbench.mjs96
-rw-r--r--bench/emitter/microbench_once.mjs40
-rw-r--r--bench/emitter/realworld_stream.mjs63
-rw-r--r--bench/package.json10
-rwxr-xr-xbench/snippets/bun.lockbbin0 -> 1477 bytes
-rw-r--r--bench/snippets/emitter.mjs101
-rw-r--r--bench/snippets/package.json7
9 files changed, 112 insertions, 236 deletions
diff --git a/bench/bun.lockb b/bench/bun.lockb
index 298e2a7c9..abc5a11b4 100755
--- a/bench/bun.lockb
+++ b/bench/bun.lockb
Binary files differ
diff --git a/bench/emitter/implementations.mjs b/bench/emitter/implementations.mjs
deleted file mode 100644
index 2050ac38e..000000000
--- a/bench/emitter/implementations.mjs
+++ /dev/null
@@ -1,31 +0,0 @@
-import EventEmitter3 from "eventemitter3";
-import { group } from "mitata";
-import EventEmitterNative from "node:events";
-
-export const implementations = [
- {
- EventEmitter: EventEmitterNative,
- name: process.isBun ? (EventEmitterNative.init ? "bun" : "C++") : "node:events",
- monkey: true,
- },
- // { EventEmitter: EventEmitter3, name: "EventEmitter3" },
-].filter(Boolean);
-
-for (const impl of implementations) {
- impl.EventEmitter?.setMaxListeners?.(Infinity);
-}
-
-export function groupForEmitter(name, cb) {
- if (implementations.length === 1) {
- return cb({
- ...implementations[0],
- name: `${name}: ${implementations[0].name}`,
- });
- } else {
- return group(name, () => {
- for (let impl of implementations) {
- cb(impl);
- }
- });
- }
-}
diff --git a/bench/emitter/microbench.mjs b/bench/emitter/microbench.mjs
deleted file mode 100644
index eae59d4c1..000000000
--- a/bench/emitter/microbench.mjs
+++ /dev/null
@@ -1,96 +0,0 @@
-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();
diff --git a/bench/emitter/microbench_once.mjs b/bench/emitter/microbench_once.mjs
deleted file mode 100644
index b24fb2103..000000000
--- a/bench/emitter/microbench_once.mjs
+++ /dev/null
@@ -1,40 +0,0 @@
-import { bench, run } from "mitata";
-import { groupForEmitter } from "./implementations.mjs";
-
-var id = 0;
-
-groupForEmitter("test 1", ({ EventEmitter, name }) => {
- const emitter = new EventEmitter();
-
- emitter.on("hello", event => {
- event.preventDefault();
- });
-
- bench(name, () => {
- emitter.once("hello", event => {
- event.preventDefault();
- });
- emitter.emit("hello", {
- preventDefault() {
- id++;
- },
- });
- });
-});
-
-groupForEmitter("test 2", ({ EventEmitter, name }) => {
- const emitter = new EventEmitter();
-
- bench(name, () => {
- emitter.once("hello", event => {
- event.preventDefault();
- });
- emitter.emit("hello", {
- preventDefault() {
- id++;
- },
- });
- });
-});
-
-await run();
diff --git a/bench/emitter/realworld_stream.mjs b/bench/emitter/realworld_stream.mjs
deleted file mode 100644
index e65398b49..000000000
--- a/bench/emitter/realworld_stream.mjs
+++ /dev/null
@@ -1,63 +0,0 @@
-import { bench, run } from "mitata";
-import { groupForEmitter } from "./implementations.mjs";
-
-// Psuedo RNG is derived from https://stackoverflow.com/a/424445
-let rngState = 123456789;
-function nextInt() {
- const m = 0x80000000; // 2**31;
- const a = 1103515245;
- const c = 12345;
- rngState = (a * rngState + c) % m;
- return rngState;
-}
-function nextRange(start, end) {
- // returns in range [start, end): including start, excluding end
- // can't modulu nextInt because of weak randomness in lower bits
- const rangeSize = end - start;
- const randomUnder1 = nextInt() / 0x7fffffff; // 2**31 - 1
- return start + Math.floor(randomUnder1 * rangeSize);
-}
-
-const chunks = new Array(1024).fill(null).map((_, j) => {
- const arr = new Uint8Array(1024);
- for (let i = 0; i < arr.length; i++) {
- arr[i] = nextRange(0, 256);
- }
- return arr;
-});
-
-groupForEmitter("stream simulation", ({ EventEmitter, name }) => {
- bench(name, () => {
- let id = 0;
- const stream = new EventEmitter();
-
- stream.on("start", res => {
- if (res.status !== 200) throw new Error("not 200");
- });
-
- const recived = [];
- stream.on("data", req => {
- recived.push(req);
- });
-
- stream.on("end", ev => {
- ev.preventDefault();
- });
-
- // simulate a stream
- stream.emit("start", { status: 200 });
- for (let chunk of chunks) {
- stream.emit("data", chunk);
- }
- stream.emit("end", {
- preventDefault() {
- id++;
- },
- });
-
- if (id !== 1) throw new Error("not implemented right");
- if (recived.length !== 1024) throw new Error("not implemented right");
- });
-});
-
-await run();
diff --git a/bench/package.json b/bench/package.json
index 501dd6f51..9cd47e043 100644
--- a/bench/package.json
+++ b/bench/package.json
@@ -1,13 +1,11 @@
{
"name": "bench",
"dependencies": {
- "@babel/core": "^7.16.10",
- "@babel/preset-react": "^7.16.7",
- "@swc/core": "^1.2.133",
- "benchmark": "^2.1.4",
+ "mitata": "^0.1.6",
"esbuild": "^0.14.12",
- "eventemitter3": "^5.0.0",
- "mitata": "^0.1.6"
+ "@swc/core": "^1.2.133",
+ "@babel/core": "^7.16.10",
+ "@babel/preset-react": "^7.16.7"
},
"scripts": {
"ffi": "cd ffi && bun run deps && bun run build && bun run bench",
diff --git a/bench/snippets/bun.lockb b/bench/snippets/bun.lockb
new file mode 100755
index 000000000..3acb6d075
--- /dev/null
+++ b/bench/snippets/bun.lockb
Binary files differ
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"
+}