aboutsummaryrefslogtreecommitdiff
path: root/bench/gzip/deno.js
diff options
context:
space:
mode:
authorGravatar evan <github@evan.lol> 2022-07-12 04:40:12 -0400
committerGravatar GitHub <noreply@github.com> 2022-07-12 01:40:12 -0700
commita9e4ff2029a769737982fcf7e0b7d76d35cf35e4 (patch)
tree497832408d926e2bed779fcec4ba655624a29792 /bench/gzip/deno.js
parent7eea306b0ff46a27f134809a9b3c12bf4b38fa7e (diff)
downloadbun-a9e4ff2029a769737982fcf7e0b7d76d35cf35e4.tar.gz
bun-a9e4ff2029a769737982fcf7e0b7d76d35cf35e4.tar.zst
bun-a9e4ff2029a769737982fcf7e0b7d76d35cf35e4.zip
cleanup benchmarks folder (#587)
* cleanup benchmarks * run prettier
Diffstat (limited to 'bench/gzip/deno.js')
-rw-r--r--bench/gzip/deno.js85
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;
+}