From 43de33afc7fcc4cab25f578566e225ba9e4d4258 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Tue, 7 Jun 2022 22:32:46 -0700 Subject: Web Streams API (#176) * [bun.js] `WritableStream`, `ReadableStream`, `TransformStream`, `WritableStreamDefaultController`, `ReadableStreamDefaultController` & more * Implement `Blob.stream()` * Update streams.test.js * Fix sourcemaps crash * [TextEncoder] 3x faster in hot loops * reading almost works * start to implement native streams * Implement `Blob.stream()` * Implement `Bun.file(pathOrFd).stream()` * Add an extra function * [fs.readFile] Improve performance * make jsc bindings a little easier to work with * fix segfault * faster async/await + readablestream optimizations * WebKit updates * More WebKit updates * Add releaseWEakrefs binding * `bun:jsc` * More streams * Update streams.test.js * Update Makefile * Update mimalloc * Update WebKit * Create bun-jsc.test.js * Faster ReadableStream * Fix off by one & exceptions * Handle empty files/blobs * Update streams.test.js * Move streams to it's own file * temp * impl #1 * take two * good enough for now * Implement `readableStreamToArray`, `readableStreamToArrayBuffer`, `concatArrayBuffers` * jsxOptimizationInlining * Fix crash * Add `jsxOptimizationInline` to Bun.Transpiler * Update Transpiler types * Update js_ast.zig * Automatically choose production mode when NODE_ENV="production" * Update cli.zig * [jsx] Handle defaultProps when inlining * Update transpiler.test.js * uncomment some tests Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> --- bench/snippets/concat.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 bench/snippets/concat.js (limited to 'bench/snippets/concat.js') diff --git a/bench/snippets/concat.js b/bench/snippets/concat.js new file mode 100644 index 000000000..46c6e0f7d --- /dev/null +++ b/bench/snippets/concat.js @@ -0,0 +1,66 @@ +import { bench, group, run } from "mitata"; +import { readFileSync } from "fs"; +import { allocUnsafe } from "bun"; + +function polyfill(chunks) { + var size = 0; + for (const chunk of chunks) { + size += chunk.byteLength; + } + var buffer = new ArrayBuffer(size); + var view = new Uint8Array(buffer); + var offset = 0; + for (const chunk of chunks) { + view.set(chunk, offset); + offset += chunk.byteLength; + } + return buffer; +} + +function polyfillUninitialized(chunks) { + var size = 0; + for (const chunk of chunks) { + size += chunk.byteLength; + } + var view = allocUnsafe(size); + + var offset = 0; + for (const chunk of chunks) { + view.set(chunk, offset); + offset += chunk.byteLength; + } + return view.buffer; +} + +const chunkGroups = [ + [Uint8Array.from([123]), Uint8Array.from([456]), Uint8Array.from([789])], + Array.from(readFileSync(import.meta.path)).map((a) => Uint8Array.from([a])), + [readFileSync(import.meta.path)], + Array.from({ length: 42 }, () => readFileSync(import.meta.path)), + Array.from({ length: 2 }, () => + new TextEncoder().encode(readFileSync(import.meta.path, "utf8").repeat(100)) + ), +]; + +for (const chunks of chunkGroups) { + group( + `${chunks.reduce( + (prev, curr, i, a) => prev + curr.byteLength, + 0 + )} bytes for ${chunks.length} chunks`, + () => { + bench("Bun.concatArrayBuffers", () => { + Bun.concatArrayBuffers(chunks); + }); + bench("Uint8Array.set", () => { + polyfill(chunks); + }); + + bench("Uint8Array.set (uninitialized memory)", () => { + polyfillUninitialized(chunks); + }); + } + ); +} + +await run(); -- cgit v1.2.3