Я изучаю другой формат данных (string vs masgpack byte) для эффективного кодирования и декодирования 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);
}
Логика проста: я увеличивая длину массива и пытается выяснить, время, затраченное на декодер для декодирования массива 10000 раз.
К моему удивлению, msgpack принимает в 10 раз больше, чем json.parse. Чтобы декодировать 100-разрядный массив, msgpack занимает 4694 мс, тогда как json.parse занимает всего 378 мс, хотя msgpack сжимает массив до 1303 байтов из 3602 байтов (при условии, что каждый символ занимает 2 байта).
Первоначально предполагалось, что размер меньшего размера для декодирования означает меньшее время для декодирования, но его определенно не так. Любая идея почему? Вы видите какую-либо проблему с программой для оценки msgpack?
Благодаря
Имеет смысл, спасибо, знаете ли вы о каких-либо библиотеках, которые лучше, чем JSON.parse вообще? –
@ShankhoneerChakrovarty Нет, я не знаю. Я предполагаю, что любая библиотека, которая использует дополнение node.js в качестве back-end, будет довольно быстрой. – Wildfire