# web-compressor **Repository Path**: mirrors_WebReflection/web-compressor ## Basic Information - **Project Name**: web-compressor - **Description**: A gzip/deflate compressor based on De/CompressionStream buffers and base64 - **Primary Language**: Unknown - **License**: ISC - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-19 - **Last Updated**: 2025-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebCompressor **Social Media Photo by [Tarik Haiga](https://unsplash.com/@tar1k) on [Unsplash](https://unsplash.com/)** A gzip/deflate compressor based on De/CompressionStream buffers and base64. ## API The class in a nutshell: ```js class WebCompressor { constructor( format: string, // deflate (default), gzip, or others method: string // base64 (default) or utf-16 ) async compress(any:string | arrayBuffer): Promise // 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 // 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](https://gist.github.com/WebReflection/7bab57a330e4a318049fe2680ba09ed3) 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](https://codepen.io/WebReflection/pen/XWbKJQq?editors=0011)** that requires a browser compatible with [De/CompressionStream](https://wicg.github.io/compression/) such as Chrome 80+. ```js import WebCompressor from 'web-compressor'; // const WebCompressor = require('web-compressor'); // by default, arguments are `deflate` and `base64` const {compress, decompress} = new WebCompressor('gzip'); compress('This string is long enough to be worth using compression'.repeat(10)) .then(arrayBuffer => { // the compressed arrayBuffer has a special toString implementation const asString = '' + arrayBuffer; // such string is either the base64 version of the compressed buffer // or its utf-16 representation, accordingly with the method console.log('compressed length', asString.length); // when decompressing you can pass either the buffer or its string decompress(asString || buffer).then(originalString => { console.log('original length', originalString.length); console.log(originalString.slice(0, 56)); }); }); ```