После прочтения этого, есть цитата, которая выделялась:
BSON также предназначен для быстрого кодирования и декодирования. Например, целые числа хранятся в виде 32 (или 64) битовых целых чисел, поэтому их не нужно анализировать и из текста. Это использует больше пространства, чем JSON для небольших целых чисел, , но намного быстрее для синтаксического анализа.
Из того, что я читаю, вся суть использования BSON заключается в том, что он меньше подвергает риску процессор и быстрее кодирует/обрабатывает.
Но, я провел несколько тестов с помощью Node.js и используя собственный подход JSON, выталкивает BSON из воды. Некоторые тесты показывают, что JSON примерно в 3-5 раз быстрее. (И около 6-8 при использовании большего количества типов данных.)
Код проверки:
var bson = require('bson');
var BSON = new bson.BSONPure.BSON();
var os = require('os');
console.log(" OS: " + os.type() + " " + os.release() + " (" + os.arch() + ")");
console.log("RAM: " + os.totalmem() / 1048576 + " MB (total), " + os.freemem() / 1048576 + " MB (free)");
console.log("CPU: " + os.cpus()[0].speed + " MHz " + os.cpus()[0].model);
for (var r = 1; r < 4; r++) {
console.log("\nRun #" + r + ":");
var obj = {
'abcdef': 1,
'qqq': 13,
'19': [1, 2, 3, 4]
};
var start = Date.now();
for (var i = 0; i < 500000; i++) {
JSON.parse(JSON.stringify(obj));
}
var stop = Date.now();
console.log("\t JSON: " + (stop - start) + " ms");
start = Date.now();
for (var i = 0; i < 500000; i++) {
BSON.deserialize(BSON.serialize(obj));
}
stop = Date.now();
console.log("\t Bson: " + (stop - start) + " ms");
}
Результаты:
OS: Windows_NT 6.1.7601 (x64)
RAM: 8174.1171875 MB (total), 5105.03515625 MB (free)
CPU: 3515 MHz AMD FX(tm)-6300 Six-Core Processor
Run #1:
JSON: 1820 ms
Bson: 8639 ms
Run #2:
JSON: 1890 ms
Bson: 8627 ms
Run #3:
JSON: 1882 ms
Bson: 8692 ms
С учетом сказанного, я ищу бинарный подход для отправки и получения данных через websockets. И BSON делает это отлично, но, глядя на результаты тестов, как BSON может снизить налогообложение на CPU, когда требуется больше времени для сериализации/десериализации объектов?
Помогает ли BSON использовать дополнительное использование ЦП, поскольку оно не будет конвертироваться в UTF-8 с текстовыми веб-сайтами? Будет ли этот уровень производительности в этом отношении?
@Joe Clay ниже, вот только результаты для stringify
и serializing
:
Run #1:
JSON: 922 ms
Bson: 355 5ms