diff options
Diffstat (limited to 'bench/gzip/deno.js')
-rw-r--r-- | bench/gzip/deno.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/bench/gzip/deno.js b/bench/gzip/deno.js new file mode 100644 index 000000000..66c858e55 --- /dev/null +++ b/bench/gzip/deno.js @@ -0,0 +1,85 @@ +import { run, bench } from "../node_modules/mitata/src/cli.mjs"; + +const data = new TextEncoder().encode("Hello World!".repeat(9999)); + +const compressed = await compress(data); + +bench(`roundtrip - "Hello World!".repeat(9999))`, async () => { + await decompress(await compress(data)); +}); + +bench(`gzip("Hello World!".repeat(9999)))`, async () => { + await compress(data); +}); + +bench(`gunzip("Hello World!".repeat(9999)))`, async () => { + await decompress(compressed); +}); + +await run(); + +async function compress(buffer) { + const cs = new CompressionStream("gzip"); + + const writer = cs.writable.getWriter(); + + writer.write(buffer); + + writer.close(); + const chunks = []; + const reader = cs.readable.getReader(); + + let length = 0; + + while (true) { + const { done, value } = await reader.read(); + + if (done) break; + chunks.push(value); + length += value.length; + } + + const u8 = new Uint8Array(length); + + let offset = 0; + + for (const chunk of chunks) { + u8.set(chunk, offset); + offset += chunk.length; + } + + return u8; +} + +async function decompress(buffer) { + const ds = new DecompressionStream("gzip"); + + const writer = ds.writable.getWriter(); + + writer.write(buffer); + + writer.close(); + const chunks = []; + const reader = ds.readable.getReader(); + + let length = 0; + + while (true) { + const { done, value } = await reader.read(); + + if (done) break; + chunks.push(value); + length += value.length; + } + + const u8 = new Uint8Array(length); + + let offset = 0; + + for (const chunk of chunks) { + u8.set(chunk, offset); + offset += chunk.length; + } + + return u8; +} |