Warum ist JSON schneller als BSON-in node.js?

Nach der Lektüre diese, es ist ein Zitat, das in Erinnerung geblieben:

BSON ist auch entworfen, um schnell zu codieren und zu decodieren. Zum Beispiel Ganzzahlen gespeichert sind, als 32 (oder 64) - bit-Integer, so dass Sie nicht brauchen, um analysiert zu werden und aus dem text. Dieses benötigt mehr Platz als das JSON-für kleine Ganzzahlen, aber ist viel schneller zu analysieren.

Von dem, was ich lese, wird der gesamte Punkt, der mit BSON ist, weil es weniger anstrengend für die CPU und schneller zu Kodieren/Prozess.

Aber, ich habe einige tests mit Node.js und mit einer nativen JSON-Ansatz bläst BSON aus dem Wasser. Einige tests zeigen JSON ist etwa 3 bis 5 mal schneller. (Und um 6, um 8, wenn mehr Daten-Typen.)

Benchmark-Code:

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");
}

Ergebnisse:

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

Mit dieser sagte, ich bin auf der Suche nach einem binären Ansatz zum senden und empfangen von Daten mittels websockets. Und BSON funktioniert dies perfekt, aber beim Blick auf die benchmark-Ergebnisse, wie kann BSON-weniger anstrengend für die CPU, wenn es länger dauert, zu serialisieren /Deserialisieren von Objekten?

Tut BSON-make-up für den extra CPU-Auslastung nutzt es, da gibt es keine Konvertierung zu UTF-8 mit text basiert websockets? Würde das Niveau der Leistung in diesem Zusammenhang?

@Joe Clay unten, hier die Ergebnisse für stringify und serializing nur:

Run #1:
              JSON: 922 ms
              Bson: 355 5ms
  • Hm, haben Sie versucht, die Prüfung der Serialisierung und der Deserialisierung getrennt? Die Formulierung von "viel schneller zu analysieren" macht mich Frage mich, ob es ist die Serialisierung, dass die BSON-benchmark, so viel langsamer ist, anstatt es einfach insgesamt langsamer.
  • Hast du auch installieren bson-ext, damit Sie vergleichen native Implementierungen der beiden JSON und BSON? Ansonsten hast du den Vergleich zu einem rein JS BSON-Implementierung gegen eine native JSON-Implementierung.
  • Gute Idee, ich habe diese tests auf meinen post
  • Oh, nee. oops...
  • Guter Punkt, nicht der Meinung, dass.
  • Ich denke, sollten Sie den test erneut mit einem Buffer Objekt eine der Eigenschaften des prüfobjekts. Dann denke ich, Sie werden sehen, wo BSON scheint.

InformationsquelleAutor NiCk Newman | 2016-04-21
Schreibe einen Kommentar