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 的資料可能反而會比較多.