2017.2.3
2020.1.7

localStorageに保存するデータを圧縮する

localStorageに保存できる容量は大体ドメインごとに5MBなのですが、今回保存する予定のデータの容量が大きく、圧縮しないとすぐに容量がいっぱいになりそうだったのでlz-stringを使って圧縮してみることにしました。

使い方はライブラリを組み込んでメソッドを呼び出せばいいだけなのですごく簡単なのです。ただ、いくつかあるメソッドのどれを使えばいいのか分からなかったので、以下はその時のメモと動作確認になります。

ライブラリはダウンロードして自サイトに配置するか、下記のようにCDNで呼び出してください。


<script src="//cdnjs.cloudflare.com/ajax/libs/lz-string/1.4.4/lz-string.min.js"></script>

目次

  • compress / decompress
  • compressToUTF16 / decompressFromUTF16
  • compressToBase64 / decompressFromBase64
  • compressToEncodedURIComponent / decompressFromEncodedURIComponent
  • compressToUint8Array / decompressFromUint8Array
  • 最後に

compress / decompress

一部ブラウザで無効なUTF-16文字列が生成されるため、webkitブラウザでのみlocalStorageに保存できるようです。

0 byte


0 byte

compressToUTF16 / decompressFromUTF16

webkit以外のブラウザも格納できるUTF-16文字列を生成します。IE/Firefoxも対象とするならこちらを利用する感じでしょうか。

0 byte


0 byte

compressToBase64 / decompressFromBase64

localStorage保存用ではなくサーバ送信用。lz-string のバージョンが1.3.4以下ならこちら。厳密にはURIに準拠していないらしい。

0 byte


0 byte

compressToEncodedURIComponent / decompressFromEncodedURIComponent

localStorage保存用ではなくサーバ送信用。lz-string のバージョンが1.3.5以上ならこちらを利用。

0 byte


0 byte

compressToUint8Array / decompressFromUint8Array

Uint8Arrayで圧縮・解凍。localStorage保存用でもサーバ送信用でもないので用途不明。以下の動作確認での圧縮後のバイト数についてはuint8Array型のバイト数を表示しています。なお、圧縮の速度は通常のcompress()よりもこちらの方が試した限りでは速いです。

0 byte


0 byte

最後に

localStorage保存のためのJavaScriptによる圧縮・解凍について色々と調べましたが、これといった記事が見つかりませんでした。探し方が悪いのか、そもそもlocalStorageにそんなでかいデータを保存しないのか...

今回使ったライブラリ「lz-string」があまり使われていないのかもしれませんが、他にそれっぽいのが見つからなかったんですよね。動作確認用に用意した圧縮・解凍の処理も正確なバイト数を算出しているのかちょっと怪しいです。なので、あくまで参考程度としてください。

JavaScript】関連記事