Pako对我来说是有用的,试试看:
而不是使用字符串id使用byteArrays,就像它完成here。
获取pako.js,你可以解压缩的ByteArray像这样:
<html>
<head>
<title>Gunzipping binary gzipped string</title>
<script type="text/javascript" src="pako.js"></script>
<script type="text/javascript">
// Get datastream as Array, for example:
var charData = [31,139,8,0,0,0,0,0,0,3,5,193,219,13,0,16,16,4,192,86,214,151,102,52,33,110,35,66,108,226,60,218,55,147,164,238,24,173,19,143,241,18,85,27,58,203,57,46,29,25,198,34,163,193,247,106,179,134,15,50,167,173,148,48,0,0,0];
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// Pako magic
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
var strData = String.fromCharCode.apply(null, new Uint16Array(data));
// Output to console
console.log(strData);
</script>
</head>
<body>
Open up the developer console.
</body>
</html>
运行例如:http://jsfiddle.net/9yH7M/
另外,您可以Base64编码的阵列在发送前在为数组占用了大量的开销当作为JSON或XML发送时。同样解码:
// Get some base64 encoded binary data from the server. Imagine we got this:
var b64Data = 'H4sIAAAAAAAAAwXB2w0AEBAEwFbWl2Y0IW4jQmziPNo3k6TuGK0Tj/ESVRs6yzkuHRnGIqPB92qzhg8yp62UMAAAAA==';
// Decode base64 (convert ascii to binary)
var strData = atob(b64Data);
// Convert binary string to character-number array
var charData = strData.split('').map(function(x){return x.charCodeAt(0);});
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// Pako magic
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
var strData = String.fromCharCode.apply(null, new Uint16Array(data));
// Output to console
console.log(strData);
运行例如:http://jsfiddle.net/9yH7M/1/
对于更高级的功能,请阅读pako API documentation。
你能列出那些你尝试过的不好的工作吗?它肯定会保存我们重置的时间,而不必执行您已经完成的相同工作。 –
你看过http://stackoverflow.com/questions/4570333/string-compression-in-javascript的答案吗?评分最高的回答链接到这个页面http://pieroxy.net/blog/pages/lz-string/index.html,其中引用了一些lz压缩库lib –
如果你有一些时间你可以将位转换为图像(每3位作为像素),并保存为PNG无损图像,最佳性能与非常好的压缩 –