WebCompressor
Social Media Photo by Tarik Haiga on Unsplash
A gzip/deflate compressor based on De/CompressionStream buffers and base64.
API
The class in a nutshell:
async compress(any:string | arrayBuffer): Promise<arrayBuffer> // the returned arrayBuffer has a special toString() method // so that it's possible to use it either as buffer or as string async decompress(any:string | arrayBuffer): Promise<string> // the returned string is the one that was originally compressed}
About the compression method
The utf-16
compression method makes it possible to shrink into a JavaScript string any compressed utf-8
buffer, producing on average half up to 1/3rd of the equivalent base64 output.
You can test some localStorage
benchmark here to verify utf-16
grants 2.5X extra entries, compared to base64.
For the time being though, the utf-16
method is not used as default, for the simple reason that it's not standardized as much as base64 is.
Example
Live Demo that requires a browser compatible with De/CompressionStream such as Chrome 80+.
;// const WebCompressor = require('web-compressor'); // by default, arguments are `deflate` and `base64`const compress decompress = 'gzip'; ;