2014年10月16日

LZアルゴリズムでBase62に圧縮するJavaScriptライブラリ書きました

LZSS(LZ77) 圧縮アルゴリズムで文字列を圧縮/解凍します。
圧縮された結果は Base62 (0-9A-Za-z) からなるバイナリセーフな文字列になります。
サイズ制限のある localStorage や sessionStorage, cookie など、 例えば localStorage は 5MB 使えたとしても UTF-16 の場合、実質的に 2.5MB 分になってしまします。
圧縮結果は内容にもよりますが おおよそ 60~80% 程度のサイズになります。
例外として、繰り返しのない文字列は1~2割程度サイズが増えることがあります。

追記

2014-10-24 現在、高速化にすべく見なおして圧縮率も上がりました。
繰り返しのない文字列 (例えば U+0000 - U+FFFF 1文字ずつなど) も大幅なサイズ増加なく圧縮できます

  1. var data = 'hello hello hello';  
  2. console.log(data.length); // 17  
  3.   
  4. var compressed = lzbase62.compress(data);  
  5. console.log(compressed); // 'tYVccfrgxGL'  
  6. console.log(compressed.length); // 11  
  7. console.log(compressed.length < data.length); // true  
  8.   
  9. var decompressed = lzbase62.decompress(compressed);  
  10. console.log(decompressed); // 'hello hello hello'  
  11. console.log(decompressed === data); // true  

Download

※バージョンが違うとフォーマットも違う可能性があります。できるだけ最新バージョンをご利用ください

Demo

Repository