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