Schnellste Javascript-Objekt-Serialisierung mit Google V8

Muss ich serialisieren mäßig komplexe Objekte mit 1-100 ist der gemischte Typ-Eigenschaften.

JSON wurde ursprünglich verwendet, dann wechselte ich auf BSON, die ist geringfügig schneller.

Codierung 10000 sample-Objekte

JSON:        1807mS
BSON:        1687mS
MessagePack: 2644mS (JS, modified for BinaryF)

Ich soll eine Größenordnung zu steigern; es ist mit einem lächerlich schlechten Einfluss auf den rest des Systems.

Teil der motivation, sich zu bewegen, um BSON ist die Anforderung zu Kodieren binärer Daten, so ist JSON (jetzt) nicht. Und weil es einfach überspringt, die binäre Daten in die Objekte, die es "cheating" in den benchmarks.

Profilierten BSON-performance-hot-spots"

  • (unvermeidlichen?) Umwandlung von UTF16-V8-JS-strings auf UTF8.
  • malloc und string-ops innerhalb der BSON-Bibliothek

Dem BSON-encoder basiert auf dem Mongo BSON-Bibliothek.

Einer nativen V8 binäre Serialisierungsprogramm könnte wunderbar sein, doch als JSON ist der native und schnell zu serialisieren ich befürchte sogar, dass möglicherweise nicht die Antwort. Vielleicht meine beste Wette ist die Optimierung der heck aus dem BSON-Bibliothek oder Schreibe meine eigenen plus herauszufinden weit effizienter Weg, um die Fäden ziehen aus der V8. Eine Taktik könnte sein, fügen Sie UTF16 Unterstützung von BSON.

Hier bin ich also für Ideen, und vielleicht eine Plausibilitätsprüfung.

Bearbeiten

Hinzugefügt MessagePack benchmark. Dies wurde geändert, von der original-JS zu verwenden BinaryF.

Den C++ - MessagePack Bibliothek bieten weitere Verbesserungen, ich kann die benchmark, die es in der isolation zu vergleichen, die direkt mit dem BSON-Bibliothek.

Vielleicht können Sie eine jsperf.com Testfall zu Hilfe in das Verständnis der Art der Daten, die Sie speichern müssen
Nur standard-JS-Objekte: {param1:"name",param2:{paramA:1,paramB:[0x0,0x1,0x2],paramC:<BINARY>}} mit bis zu 100 Eigenschaften, beliebig verschachtelte, von denen einige enthalten byte-arrays mit CommonJS BinaryF. Ohne BinaryF und ein BSON-serializer, ist es unmöglich, alle nützlichen Vergleiche.
Hast du irgendeinen link/Verweis auf das, was Sie für BSON, MsgPack, etc?
Wie zutreffend sind die benchmarks als pro 2013? PS: Sie können pack binäre Objekte in JSON über window.btoa für eine lange Zeit.
Ich habe nicht diese tests ausführen, für eine lange Zeit. AFAIK Fenster.btoa/atob base64-so müssten zusätzliche Verarbeitung (wie JSON.stringify/analysieren), um zu/von base64-Daten kompatibel, so wäre es sogar noch langsamer.

InformationsquelleAutor hplbsh | 2011-06-02

Schreibe einen Kommentar