Ich untersuche verschiedene Datenformat (String vs MASGPACK Byte), um JSON effizient zu kodieren und zu dekodieren. Die Jons, die ich erhalten werde, haben kein Schema, zumindest um es generisch zu halten, ich gehe davon aus, dass die Jons keinem bestimmten Schema folgen.Warum msgpack ist langsamer als json.parse?
Hier ist eine kleine JS Ich beurteile verwendet:
// 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);
}
Die Logik ist einfach: Ich habe die Länge des Arrays bin zu erhöhen und versuchen, die Zeit durch den Decoder genommen, um herauszufinden, um das Array zu dekodieren 10000 mal.
Zu meiner Überraschung nimmt msgpack 10 Mal mehr als json.parse. Zum Dekodieren des 100-Längen-Arrays benötigt msgpack 4694 ms, wohingegen json.parse nur 378 ms benötigt, obwohl msgpack das Array von 3602 Bytes auf 1303 Bytes komprimiert (vorausgesetzt, dass jedes Zeichen 2 Bytes benötigt).
Was ich ursprünglich angenommen habe, ist eine kleinere Größe zu decodieren würde bedeuten, dass kleinere Zeit zu entschlüsseln, aber es ist definitiv nicht der Fall. Irgendeine Idee warum? Sehen Sie irgendein Problem mit dem Programm, um msgpack auszuwerten?
Dank
Macht Sinn, danke, wissen Sie von Bibliotheken, die besser als JSON.parse im Allgemeinen? –
@ShankhoneerChakrovarty Nein, ich weiß es nicht. Ich denke, jede Bibliothek, die das Add-on node.js als Back-End verwendet, wird ziemlich schnell sein. – Wildfire