Skip to content

Instantly share code, notes, and snippets.

@jedisct1
Last active August 31, 2023 19:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jedisct1/a231c64de60ebfd700e7eb9882beaed4 to your computer and use it in GitHub Desktop.
Save jedisct1/a231c64de60ebfd700e7eb9882beaed4 to your computer and use it in GitHub Desktop.
use flate2::Compression;
use std::io::prelude::*;
use benchmark_simple::*;
fn memusage() -> usize {
#[cfg(target_arch = "wasm32")]
let z = core::arch::wasm32::memory_grow(0, 0);
#[cfg(not(target_arch = "wasm32"))]
let z = 0;
z
}
fn main() {
let bench = Bench::new();
let options = &Options {
iterations: 1,
warmup_iterations: 1,
min_samples: 5,
max_samples: 10,
max_rsd: 1.0,
..Default::default()
};
let corpus = include_bytes!("corpus.txt");
let mut mem = memusage();
let res = bench.run(options, || {
let mut compressor = flate2::bufread::GzEncoder::new(&corpus[..], Compression::new(9));
let mut compressed = Vec::new();
compressor.read_to_end(&mut compressed).unwrap();
compressed
});
println!("Compression speed: {}", res.throughput(corpus.len() as _));
println!("Compression memory usage: {}", memusage() - mem);
let mut compressor = flate2::bufread::GzEncoder::new(&corpus[..], Compression::new(9));
let mut compressed = Vec::new();
compressor.read_to_end(&mut compressed).unwrap();
println!("Compressed size: {}", compressed.len());
mem = memusage();
let res = bench.run(options, || {
let mut decompressor = flate2::bufread::GzDecoder::new(&compressed[..]);
let mut decompressed = Vec::new();
decompressor.read_to_end(&mut decompressed).unwrap();
});
println!("Decompression speed: {}", res.throughput(corpus.len() as _));
println!("Decompression memory usage: {}", memusage() - mem);
}
@jedisct1
Copy link
Author

jedisct1 commented Aug 31, 2023

WebAssembly (wasmtime):

flate2 default:

Compression speed: 15.24 M/s
Compression memory usage: 132

Compressed size: 3855809

Decompression speed: 109.92 M/s
Decompression memory usage: 417
zlib-sys:

Compression speed: 14.77 M/s
Compression memory usage: 131

Compressed size: 3854747

Decompression speed: 308.83 M/s
Decompression memory usage: 417

@jedisct1
Copy link
Author

If compression speed matters, the Zig implementation of zlib is 50% faster, and can easily be wrapped in a Rust crate.

Compression speed: 20.74 M/s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment