*ここでの「効率的」とは、基本的にサイズが小さい (IO 待機時間を短縮する) ことと、取得/デシリアライズ時間が速いことを意味します。保存時間はそれほど重要ではありません。
それぞれが 0 から 50 の範囲の 1800 個の値を持つ数十個の整数の配列を、ブラウザーの localStorage に、つまり文字列として格納する必要があります。
明らかに、最も簡単な方法はJSON.stringify
、データの範囲がよく知られていることを考えると、多くの不要な情報を追加することです。これらの配列の 1 つの平均サイズは、約 5500 バイトです。
ここに私が試したいくつかの他の方法があります(結果のサイズ、および最後に1000回逆シリアル化する時間)
数字をゼロで埋めて、それぞれが 2 文字の長さになるようにします。例:
[5, 27, 7, 38] ==> "05270738"
base 50 エンコード:
[5, 11, 7, 38] ==> "5b7C"
値を文字コードとして使用するだけです(最初に奇妙な制御文字を避けるために32を追加します):
[5, 11, 7, 38] ==> "%+'F" (String.fromCharCode(37), String.fromCharCode(43) ...)
ここに私の結果があります:
size Chrome 18 Firefox 11
-------------------------------------------------
JSON.stringify 5286 60ms 99ms
zero-padded 3600 354ms 703ms
base 50 1800 315ms 400ms
charCodes 1800 21ms 178ms
私の質問は、まだ検討していないさらに良い方法があるかどうかです。
MДΓΓБДLL を更新すると、データの圧縮を使用することが提案されました。この LZW 実装を base 50 および charCode データと組み合わせます。また、aroth のコード (4 つの整数を 3 バイトにパックする) もテストしました。私はこれらの結果を得ました:
size Chrome 18 Firefox 11
-------------------------------------------------
LZW base 50 1103 494ms 999ms
LZW charCodes 1103 194ms 882ms
bitpacking 1350 2395ms 331ms