我正在研究不同的數據格式(字符串vs masgpack字節)以有效地對json進行編碼和解碼。我會接受的jsons不會有任何模式,至少保持它的通用性,我假設jsons不遵循任何特定的模式。爲什麼msgpack比json.parse慢?
這裏是一個小JS我來評價:
// skip-eslint
var msgpack = require('msgpack5')() // namespace our extensions
, encode = msgpack.encode
, decode = msgpack.decode;
var helloWorldObj = { 'hello': 'world' };
var json = [];
var MAX_DECODE_REPEAT = 10000;
var MAX_REPEAT = 100;
console.log('json,data,time');
//msgpack
for (var i=0;i<MAX_REPEAT;i++) {
json = [];
// create i+1 length json array
for(var k=0;k<=i;k++){
json.push(helloWorldObj);
}
// encode the json array
var encodedJson = encode(json);
var start = new Date().getTime();
// start decoding =>msgpack
for(var count=0;count<MAX_DECODE_REPEAT;count++){
decode(encodedJson);
}
var end = new Date().getTime();
var time = end-start;
console.log(json.length +',' + encodedJson.length + ','+time);
}
// JSON.parse
for (var i=0;i<MAX_REPEAT;i++) {
json = [];
// create i+1 length json array
for(var k=0;k<=i;k++){
json.push(helloWorldObj);
}
// stringify the json array
var jsonString = JSON.stringify(json);
var start = new Date().getTime();
// start decoding =>msgpack
for(var count=0;count<MAX_DECODE_REPEAT;count++){
JSON.parse(jsonString);
}
end = new Date().getTime();
time = end-start;
console.log(json.length +',' + jsonString.length*2 + ','+time);
}
的邏輯很簡單:我增加陣列的長度,並試圖找出到陣列解碼由解碼器所用的時間萬倍。
令我驚訝的是,msgpack比json.parse多了10倍。解碼100個長度數組msgpack需要4694毫秒,而json.parse僅需要378毫秒,即使msgpack將數組從3602個字節壓縮到1303個字節(假定每個字符需要2個字節)。
我最初的想法是解碼的較小尺寸意味着較短的解碼時間,但它絕對不是這種情況。任何想法爲什麼?你看到程序評估msgpack的任何問題嗎?
感謝
有道理,謝謝,你知道任何比JSON.parse更好的庫嗎? –
@ShankhoneerChakrovarty不,我不知道。我想,任何使用node.js插件作爲後端的庫都會很快。 – Wildfire