String compression in JavaScript

前端 未结 7 995
予麋鹿
予麋鹿 2020-11-29 00:31

I\'m looking for a JavaScript function that given a string returns a compressed (shorter) string.

I\'m developing a Chrome web application that saves long strings (H

7条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-29 01:03

    It seems, there is a proposal of compression/decompression API: https://github.com/wicg/compression/blob/master/explainer.md .

    And it is implemented in Chrome 80 (right now in Beta) according to a blog post at https://blog.chromium.org/2019/12/chrome-80-content-indexing-es-modules.html .

    I am not sure I am doing a good conversion between streams and strings, but here is my try to use the new API:

    function compress(string, encoding) {
      const byteArray = new TextEncoder().encode(string);
      const cs = new CompressionStream(encoding);
      const writer = cs.writable.getWriter();
      writer.write(byteArray);
      writer.close();
      return new Response(cs.readable).arrayBuffer();
    }
    
    function decompress(byteArray, encoding) {
      const cs = new DecompressionStream(encoding);
      const writer = cs.writable.getWriter();
      writer.write(byteArray);
      writer.close();
      return new Response(cs.readable).arrayBuffer().then(function (arrayBuffer) {
        return new TextDecoder().decode(arrayBuffer);
      });
    }
    
    const test = "http://www.ScriptCompress.com - Simple Packer/Minify/Compress JavaScript Minify, Fixify & Prettify 75 JS Obfuscators In 1 App 25 JS Compressors (Gzip, Bzip, LZMA, etc) PHP, HTML & JS Packers In 1 App PHP Source Code Packers Text Packer HTML Packer or v2 or v3 or LZW Twitter Compress or More Words DNA & Base64 Packer (freq tool) or v2 JS JavaScript Code Golfer Encode Between Quotes Decode Almost Anything Password Protect Scripts HTML Minifier v2 or Encoder or Escaper CSS Minifier or Compressor v2 SVG Image Shrinker HTML To: SVG or SVGZ (Gzipped) HTML To: PNG or v2 2015 JS Packer v2 v3 Embedded File Generator Extreme Packer or version 2 Our Blog DemoScene JS Packer Basic JS Packer or New Version Asciify JavaScript Escape JavaScript Characters UnPacker Packed JS JavaScript Minify/Uglify Text Splitter/Chunker Twitter, Use More Characters Base64 Drag 'n Drop Redirect URL DataURI Get Words Repeated LZMA Archiver ZIP Read/Extract/Make BEAUTIFIER & CODE FIXER WHAK-A-SCRIPT JAVASCRIPT MANGLER 30 STRING ENCODERS CONVERTERS, ENCRYPTION & ENCODERS 43 Byte 1px GIF Generator Steganography PNG Generator WEB APPS VIA DATAURL OLD VERSION OF WHAK PAKr Fun Text Encrypt Our Google";
    
    async function testCompression(text, encoding = 'deflate') {
      console.log(encoding + ':');
      console.time('compress');
      const compressedData = await compress(text, encoding);
      console.timeEnd('compress');
      console.log('compressed length:', compressedData.byteLength, 'bytes');
      console.time('decompress');
      const decompressedText = await decompress(compressedData, encoding);
      console.timeEnd('decompress');
      console.log('decompressed length:', decompressedText.length, 'characters');
      console.assert(text === decompressedText);
    }
    
    (async function () {
      await testCompression(test, 'deflate');
      await testCompression(test, 'gzip');
    }());

提交回复
热议问题