*这里的“高效”基本上是指较小的尺寸(以减少 IO 等待时间)和快速的检索/反序列化时间。存储时间并不那么重要。
我必须在浏览器的 localStorage 中存储几十个整数数组,每个数组都有 0-50 范围内的 1800 个值 - 即作为字符串。
JSON.stringify
显然,考虑到数据的范围是众所周知的,最简单的方法是直接添加很多不必要的信息。这些数组之一的平均大小约为 5500 字节。
这是我尝试过的其他一些方法(结果大小,以及最后反序列化 1000 次的时间)
对数字进行零填充,因此每个数字长 2 个字符,例如:
[5, 27, 7, 38] ==> "05270738"
以 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 实现与基数 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