我正在编写一个Web应用程序,需要通过AJAX将JSON数据存储在一个小的,固定大小的服务器端缓存中(想想:Opensocial配额).我无法控制服务器.
我需要减少存储数据的大小以保持服务器端配额,并且希望能够在将其发送到服务器之前在浏览器中对字符串化JSON进行gzip.
但是,我找不到Gzip的JavaScript实现方式.有关如何在发送之前压缩客户端数据的任何建议吗?
我有一个用JavaScript编写的Web应用程序,可以通过Safari和iPhone在桌面上成功运行.
我们正在考虑将此应用程序移植到iPad上,当我们在设备上的localStorage中存储相对少量的数据时,我们遇到了QUOTA_EXCEEDED_ERR问题.我知道这个错误意味着什么,但我不认为我存储了那么多数据.
还有其他人在做类似的事吗?看到/没有看到这个问题?
凯文·...
*"高效"这里基本上意味着更小的尺寸(减少IO等待时间),以及快速的检索/反序列化时间.存储时间并不重要.
我必须在浏览器的localStorage中存储几十个整数数组,每个数组都有一个范围为0-50的1800个值 - 也就是说,作为一个字符串.
显然,最简单的方法是,只要JSON.stringify它,它会增加许多不必要的信息,考虑到数据的范围是众所周知的.其中一个数组的平均大小为~5500字节.
以下是我尝试过的其他一些方法(结果大小,以及最后反序列化1000次的时间)
对数字进行零填充,使每个长度为2个字符,例如:
[5, 27, 7, 38] ==> "05270738"
Run Code Online (Sandbox Code Playgroud)base 50编码:
[5, 11, 7, 38] ==> "5b7C"
Run Code Online (Sandbox Code Playgroud)只使用该值作为字符代码(添加32以避免开始时奇怪的控制字符):
[5, 11, 7, 38] ==> "%+'F" (String.fromCharCode(37), String.fromCharCode(43) ...)
Run Code Online (Sandbox Code Playgroud)这是我的结果:
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 …Run Code Online (Sandbox Code Playgroud)