使用Javascript在localStorage中存储大型整数数组的最有效方法

nic*_*ckf 13 javascript html5 local-storage web-storage

*"高效"这里基本上意味着更小的尺寸(减少IO等待时间),以及快速的检索/反序列化时间.存储时间并不重要.

我必须在浏览器的localStorage中存储几十个整数数组,每个数组都有一个范围为0-50的1800个值 - 也就是说,作为一个字符串.

显然,最简单的方法是,只要JSON.stringify它,它会增加许多不必要的信息,考虑到数据的范围是众所周知的.其中一个数组的平均大小为~5500字节.

以下是我尝试过的其他一些方法(结果大小,以及最后反序列化1000次的时间)

这是我的结果:

                  size     Chrome 18   Firefox 11
-------------------------------------------------
JSON.stringify    5286          60ms         99ms
zero-padded       3600         354ms        703ms
base 50           1800         315ms        400ms
charCodes         1800          21ms        178ms
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果有一个更好的方法,我还没有考虑过?

更新
MДΓΓБДLL建议对数据使用压缩.将此LZW实现与基础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
Run Code Online (Sandbox Code Playgroud)

jim*_*imw 0

假设(如您的测试中所示)压缩所花费的时间比大小减少节省的时间更多,则您的 char 编码是在不进行位移的情况下获得的最小编码。目前,每个数字使用一个字节,但如果保证它们足够小,您可以在每个字节中放入两个数字。这可能是过度优化,除非这是代码中非常热门的部分。