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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die Serialisierung /Deserialisierung protobuf ist ziemlich schwer zu schlagen. Ich weiß nicht, ob Sie wechseln können, den transport-Protokoll. Aber wenn man protobuf sollte auf jeden Fall berücksichtigt werden.
Werfen Sie einen Blick auf all die Antworten auf Protocol Buffers versus JSON oder BSON.
Akzeptierte Antwort wählt Sparsamkeit. Es ist jedoch langsamer als protobuf. Ich vermute, es wurde gewählt, für einfache Handhabung (mit Java) nicht die Geschwindigkeit. Diese Java-benchmarks sind sehr aufschlussreich.
Der Hinweis
Die benchmarks sind Java, ich könnte mir vorstellen, dass Sie erreichen Geschwindigkeiten in der Nähe der protostuff Umsetzung von protobuf, dh 13.5-mal schneller. Schlimmsten Fall-wenn aus irgendeinem Grund Java ist einfach besser für die Serialisierung), die Sie tun können, Nein, schlimmer, der der Ebene nicht optimierten protobuf Umsetzung läuft 6.8-mal schneller.
Ich habe fest mit BSON und schrittweise zu optimieren ist, wie und Wann. Aber ich kann auch zurück zu protobuf irgendwann. Danke.
InformationsquelleAutor deft_code
Werfen Sie einen Blick auf MessagePack. Es ist kompatibel mit JSON. Aus den docs:
MessagePack benchmark Hinzugefügt. Tat ziemlich gut bedenkt, dass es Reine JS...
Test MessagePack jetzt wieder in vs JSON 🙂 JSON völlig zerstört, das gleiche gilt für
bson
(Auch native bson mit c++ - bindings). Ja, ich weiß, diese Frage ist etwa 5 Jahre alt, aber der Mensch, JSON ist ziemlich schwer zu schlagen, gerade jetzt. Ich gebe MsgPack Requisiten für die Anerkennung der Niederlage auf Ihrer github-Seite, obwohl, ahaha. - Es ist nicht einmal in der NäheInformationsquelleAutor Luke Bennett
Wenn Sie mehr Interesse an der de-serialisieren Geschwindigkeit, werfen Sie einen Blick auf JBB (Javascript Binary-Bundles) Bibliothek. Es ist schneller als BSON-oder MsgPack.
Aus der Wiki-Seite
JBB vs BSON vs MsgPack
:Leider, es ist nicht ein streaming-format, was bedeutet, dass müssen Sie vor der Verarbeitung Ihrer Daten offline. Jedoch gibt es einen plan für die Umwandlung in ein streaming-format (überprüfen Sie die Meilensteine).
InformationsquelleAutor Wavey