Now for some benchmarks. I wrote a simple benchmark program that compares my pure Go brotli package with cbrotli (the cgo wrapper in the standard brotli repo) and with compress/gzip. Here are the results for compressing Newton’s Opticks (from the testdata directory of the Go source tree):
brotli-0 37.9% 10.611264ms 51.0 MB/s
brotli-1 33.9% 12.440498ms 43.5 MB/s
brotli-2 32.2% 32.232898ms 16.8 MB/s
brotli-3 31.8% 32.788896ms 16.5 MB/s
brotli-4 31.0% 41.686392ms 13.0 MB/s
brotli-5 29.0% 52.108321ms 10.4 MB/s
brotli-6 28.4% 61.75893ms 8.8 MB/s
brotli-7 27.9% 77.842721ms 6.9 MB/s
brotli-8 27.7% 101.626643ms 5.3 MB/s
brotli-9 27.5% 118.482597ms 4.6 MB/s
brotli-10 25.6% 897.835046ms 0.6 MB/s
brotli-11 25.0% 2.13944223s 0.3 MB/s
cbrotli-0 37.9% 9.664506ms 56.0 MB/s
cbrotli-1 33.9% 11.348875ms 47.7 MB/s
cbrotli-2 32.2% 29.9876ms 18.0 MB/s
cbrotli-3 31.8% 36.219238ms 14.9 MB/s
cbrotli-4 31.0% 44.791383ms 12.1 MB/s
cbrotli-5 29.0% 57.329373ms 9.4 MB/s
cbrotli-6 28.4% 58.928917ms 9.2 MB/s
cbrotli-7 27.9% 76.804601ms 7.0 MB/s
cbrotli-8 27.7% 100.928546ms 5.4 MB/s
cbrotli-9 27.5% 122.621637ms 4.4 MB/s
cbrotli-10 25.6% 916.783042ms 0.6 MB/s
cbrotli-11 25.0% 2.091093825s 0.3 MB/s
gzip-1 38.5% 9.548712ms 56.6 MB/s
gzip-2 34.9% 11.672584ms 46.3 MB/s
gzip-3 34.1% 14.940402ms 36.2 MB/s
gzip-4 31.9% 15.40793ms 35.1 MB/s
gzip-5 30.9% 25.36402ms 21.3 MB/s
gzip-6 30.7% 31.563463ms 17.1 MB/s
gzip-7 30.6% 37.404353ms 14.5 MB/s
gzip-8 30.6% 45.647576ms 11.8 MB/s
gzip-9 30.6% 47.600027ms 11.4 MB/s