JSON 的压缩算法, 目前有 CJSON 和 HPack 两种, 都是透过结构的改变, 来将容量压小, 所以 Client 端写法还是得要改写. (不同于 gzip 等压缩算法)
HPack 与 CJSON 的 Source code
CJSON: 下载 (备份)
HPack: WebReflection/json.hpack - GitHub
CJSON Compress Algorithm
CJSON 的算法可见此篇: Compress your JSON with automatic type extraction
原理: CJSON 的压缩算法, 主要是将资料抽离成 Template 与 Value, 节省掉重复的 "Key 值".
原始 JSON
[ { // This is a point "x": 100, "y": 100 }, { // This is a rectangle "x": 100, "y": 100, "width": 200, "height": 150 }, {}, // an empty object ]
使用 CJSON 压缩的 JSON
{ "templates": [ [0, "x", "y"], [1, "width", "height"] ], "values": [ { "values": [ 1, 100, 100 ] }, { "values": [2, 100, 100, 200, 150 ] }, {} ] }
HPack Compress Algorithm
HPack 的算法可见此篇: Web Resource Optimization: JSON Compression algorithms
原理: HPack 的压缩算法, 也是将 Key, Value 抽离, 阵列中第一个值, 就是 CJSON 的 Template, 后面依序就是 Value.
原始 JSON
[{ name : "Andrea", age : 31, gender : "Male", skilled : true }, { name : "Eva", age : 27, gender : "Female", skilled : true }, { name : "Daniele", age : 26, gender : "Male", skilled : false }]
使用 HPack 压缩的 JSON
[["name","age","gender","skilled"],["Andrea",31,"Male",true],["Eva",27,"Female",true],["Daniele",26,"Male",false]]
结论
HPack 的压缩效率比较高, 如果 JSON 内容太少, CJSON 的资料可能反而会比较多
其他资料:
转载于:https://blog.51cto.com/234515/1357706