Created
May 30, 2024 16:33
-
-
Save manzt/89f10957c55e571678025de61e4be30e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { assert } from "jsr:@std/[email protected]"; | |
import * as fflate from "npm:[email protected]"; | |
import * as pako from "npm:[email protected]"; | |
async function decode_stream(stream: ReadableStream) { | |
const reader = stream | |
.pipeThrough(new DecompressionStream("gzip")) | |
.getReader(); | |
let bytes: Uint8Array; | |
{ | |
const result = await reader.read(); | |
assert(!result.done, "ReadableStream must have data"); | |
bytes = result.value; | |
} | |
{ | |
const result = await reader.read(); | |
assert(result.done, "ReadableStream must have no more data"); | |
} | |
return bytes; | |
} | |
const base = new URL( | |
"https://raw.githubusercontent.com/zarr-developers/zarr_implementations/5dc998ac72/examples/zarr.zr/gzip/.zarray", | |
); | |
const BYTES = await fetch(new URL("0.0.0", base)) | |
.then((r) => r.arrayBuffer()) | |
.then((b) => new Uint8Array(b)); | |
const REFERENCE = fflate.gunzipSync(BYTES); | |
Deno.bench("decode_stream", { baseline: true }, async () => { | |
const stream = new ReadableStream({ | |
start(controller) { | |
controller.enqueue(BYTES); | |
controller.close(); | |
}, | |
}); | |
const result = await decode_stream(stream); | |
assert(result.length === REFERENCE.length); | |
}); | |
Deno.bench("fflate.gunzip", () => { | |
const result = fflate.gunzipSync(BYTES); | |
assert(result.length === REFERENCE.length); | |
}); | |
Deno.bench("pako.inflate", () => { | |
const result = pako.inflate(BYTES); | |
assert(result.length === REFERENCE.length); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
❯ deno bench -A bench_gzip_decoder.ts Check file:///Users/manzt/demos/higlass-demo/bench_gzip_decoder.ts cpu: Apple M3 Max runtime: deno 1.44.0 (aarch64-apple-darwin) file:///Users/manzt/demos/higlass-demo/bench_gzip_decoder.ts benchmark time (avg) iter/s (min … max) p75 p99 p995 ------------------------------------------------------------------- ----------------------------- decode_stream 40.44 µs/iter 24,726.8 (36.83 µs … 239.71 µs) 40.88 µs 56.58 µs 76.71 µs fflate.gunzip 64.24 µs/iter 15,567.6 (62.5 µs … 242.88 µs) 64.21 µs 76.58 µs 80.96 µs pako.inflate 106.49 µs/iter 9,390.3 (102.04 µs … 256.96 µs) 105.83 µs 133.33 µs 152.88 µs summary decode_stream 1.59x faster than fflate.gunzip 2.63x faster than pako.inflate