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