From 987a6ee1c76a81b539eb00615a648c20e6e0013b Mon Sep 17 00:00:00 2001 From: Debadree Chatterjee Date: Sat, 13 May 2023 18:23:58 +0530 Subject: [PATCH] feat: add basic benchmarks for webstreams --- package.json | 13 +++++----- webstreams/deno.js | 54 ++++++++++++++++++++++++++++++++++++++++++ webstreams/index.mjs | 56 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 webstreams/deno.js create mode 100644 webstreams/index.mjs diff --git a/package.json b/package.json index bed4d3b..6fec3d0 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,13 @@ "version": "1.0.0", "description": "", "scripts": { - "text-decoder": "~/Developer/node/out/Release/node ./text-decoder/index.mjs && bun run ./text-decoder/index.mjs && deno run -A ./text-decoder/deno.js", - "text-encoder": "~/Developer/node/out/Release/node ./text-encoder/index.mjs && bun run ./text-encoder/index.mjs && deno run -A ./text-encoder/deno.js", - "string-decoder": "~/Developer/node/out/Release/node ./string-decoder/index.mjs && bun run ./string-decoder/index.mjs && deno run -A ./string-decoder/deno.js", - "url": "~/Developer/node/out/Release/node ./url/index.mjs && bun run ./url/index.mjs && deno run -A ./url/deno.js", - "fetch": "~/Developer/node/out/Release/node ./fetch/index.mjs && bun run ./fetch/index.mjs && deno run -A ./fetch/deno.js", - "buffer": "~/Developer/node/out/Release/node ./buffer/index.mjs && bun run ./buffer/index.mjs && deno run -A ./buffer/deno.js" + "text-decoder": "node ./text-decoder/index.mjs && bun run ./text-decoder/index.mjs && deno run -A ./text-decoder/deno.js", + "text-encoder": "node ./text-encoder/index.mjs && bun run ./text-encoder/index.mjs && deno run -A ./text-encoder/deno.js", + "string-decoder": "node ./string-decoder/index.mjs && bun run ./string-decoder/index.mjs && deno run -A ./string-decoder/deno.js", + "url": "node ./url/index.mjs && bun run ./url/index.mjs && deno run -A ./url/deno.js", + "fetch": "node ./fetch/index.mjs && bun run ./fetch/index.mjs && deno run -A ./fetch/deno.js", + "buffer": "node ./buffer/index.mjs && bun run ./buffer/index.mjs && deno run -A ./buffer/deno.js", + "webstreams": "node ./webstreams/index.mjs && bun run ./webstreams/index.mjs && deno run -A ./webstreams/deno.js" }, "keywords": [], "author": "", diff --git a/webstreams/deno.js b/webstreams/deno.js new file mode 100644 index 0000000..df24685 --- /dev/null +++ b/webstreams/deno.js @@ -0,0 +1,54 @@ +import { bench, run } from "https://esm.sh/mitata" + +const readableStreamForReading = new ReadableStream({ + pull: function(controller) { + controller.enqueue(1); + }, +}); + +const reader = readableStreamForReading.getReader(); + +const writableStreamForWriting = new WritableStream({ + write: () => {} +}); + +const writer = writableStreamForWriting.getWriter(); + +const transformStream = new TransformStream({ + transform: (chunk, controller) => controller.enqueue(chunk) +}); + +const transformStreamReader = transformStream.readable.getReader(); +const transformStreamWriter = transformStream.writable.getWriter(); + +bench('noop', () => {}); +bench('noop', () => {}); + +bench('new ReadableStream', () => { + new ReadableStream(); +}); + +bench("new WritableStream", () => { + new WritableStream(); +}); + +bench("new TransformStream", () => { + new TransformStream(); +}); + +bench('Read from ReadableStream', async () => { + await reader.read(); +}); + +bench("Write to WritableStream", async () => { + await writer.write("Hello World!"); +}); + +bench("Transform in TransformStream", async () => { + await Promise.all([ + transformStreamWriter.write("Hello World!"), + transformStreamReader.read(), + ]); +}); + +await run(); \ No newline at end of file diff --git a/webstreams/index.mjs b/webstreams/index.mjs new file mode 100644 index 0000000..f9e7ae3 --- /dev/null +++ b/webstreams/index.mjs @@ -0,0 +1,56 @@ +import { bench, run } from "mitata"; +import { ReadableStream, WritableStream, TransformStream } from 'node:stream/web'; + +const readableStreamForReading = new ReadableStream({ + pull: function(controller) { + controller.enqueue(1); + }, +}); + +const reader = readableStreamForReading.getReader(); + +const writableStreamForWriting = new WritableStream({ + write: () => {} +}); + +const writer = writableStreamForWriting.getWriter(); + +const transformStream = new TransformStream({ + transform: (chunk, controller) => controller.enqueue(chunk) +}); + +const transformStreamReader = transformStream.readable.getReader(); +const transformStreamWriter = transformStream.writable.getWriter(); + +bench('noop', () => {}); +bench('noop', () => {}); + +bench('new ReadableStream', () => { + new ReadableStream(); +}); + +bench("new WritableStream", () => { + new WritableStream(); +}); + +bench("new TransformStream", () => { + new TransformStream(); +}); + +bench('Read from ReadableStream', async () => { + await reader.read(); +}); + +bench("Write to WritableStream", async () => { + await writer.write("Hello World!"); +}); + +bench("Transform in TransformStream", async () => { + await Promise.all([ + transformStreamWriter.write("Hello World!"), + transformStreamReader.read(), + ]); +}); + +await run(); +