diff options
author | 2022-06-22 23:21:48 -0700 | |
---|---|---|
committer | 2022-06-22 23:21:48 -0700 | |
commit | 729d445b6885f69dd2c6355f38707bd42851c791 (patch) | |
tree | f87a7c408929ea3f57bbb7ace380cf869da83c0e /bench/concat.js | |
parent | 25f820c6bf1d8ec6d444ef579cc036b8c0607b75 (diff) | |
download | bun-729d445b6885f69dd2c6355f38707bd42851c791.tar.gz bun-729d445b6885f69dd2c6355f38707bd42851c791.tar.zst bun-729d445b6885f69dd2c6355f38707bd42851c791.zip |
change the directory structurejarred/rename
Diffstat (limited to 'bench/concat.js')
-rw-r--r-- | bench/concat.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/bench/concat.js b/bench/concat.js new file mode 100644 index 000000000..46c6e0f7d --- /dev/null +++ b/bench/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(); |