Ich möchte wissen, was schneller ist: XML und JSON? Wann welches verwenden?
Ich möchte wissen, was schneller ist: XML und JSON? Wann welches verwenden?
Antworten:
Bevor Sie antworten, wann Sie welche verwenden sollen, ein kleiner Hintergrund:
edit: Ich sollte erwähnen, dass dieser Vergleich wirklich aus der Perspektive der Verwendung in einem Browser mit JavaScript ist. Es ist nicht die Art und Weise entweder Datenformat hat verwendet werden, und es gibt viele gute Parser , die die Details ändern zu machen , was ich sage nicht ganz gültig.
JSON ist sowohl kompakter als auch (meiner Ansicht nach) lesbarer - bei der Übertragung kann es "schneller" sein, einfach weil weniger Daten übertragen werden.
Beim Parsen hängt es von Ihrem Parser ab. Ein Parser, der den Code (sei es JSON oder XML) in eine Datenstruktur (wie eine Karte) umwandelt, kann von der strengen Natur von XML profitieren ( XML-Schemata unterscheiden die Datenstruktur gut) - in JSON jedoch vom Typ eines Elements (String / Number / Nested JSON Object) kann syntaktisch abgeleitet werden, z.
myJSON = {"age" : 12,
"name" : "Danielle"}
Der Parser muss nicht intelligent genug sein, um zu erkennen, dass 12
er eine Zahl darstellt (und Danielle
eine Zeichenfolge wie jede andere ist). In Javascript können wir also Folgendes tun:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
In XML müssten wir ungefähr Folgendes tun:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(Abgesehen davon zeigt dies den Punkt, dass XML eher ausführlich ist; ein Problem für die Datenübertragung). Um diese Daten zu verwenden, würden wir sie durch einen Parser laufen lassen, dann müssten wir etwas aufrufen wie:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
Tatsächlich könnte ein guter Parser das age
für Sie eingeben (andererseits möchten Sie es möglicherweise nicht). Wenn wir auf diese Daten zugreifen, wird anstelle einer Attributsuche wie im obigen JSON-Beispiel eine Kartensuche für den Schlüssel durchgeführt name
. Es könnte intuitiver sein, das XML folgendermaßen zu erstellen:
<person name="Danielle" age="12" />
Wir müssten jedoch noch Kartensuchen durchführen, um auf unsere Daten zugreifen zu können:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
EDIT: Original:
In den meisten Programmiersprachen (nicht in jedem Fall) ist eine solche Kartensuche teurer als eine Attributsuche (wie wir sie oben beim Parsen des JSON erhalten haben).
Dies ist irreführend: Denken Sie daran, dass es in JavaScript (und anderen dynamischen Sprachen) keinen Unterschied zwischen einer Kartensuche und einer Feldsuche gibt. In der Tat, ein Feld Lookup ist nur eine Karte Lookup.
Wenn Sie einen wirklich lohnenden Vergleich wünschen, ist es am besten, ihn zu vergleichen - führen Sie die Benchmarks in dem Kontext durch, in dem Sie die Daten verwenden möchten.
Während ich tippte, hat Felix Kling bereits eine ziemlich prägnante Antwort gegeben, in der sie verglichen werden, wann sie jeweils verwendet werden sollen, sodass ich nicht weiter darauf eingehen werde.
Schneller ist kein Attribut von JSON oder XML oder ein Ergebnis, das ein Vergleich zwischen diesen ergeben würde. Wenn überhaupt, ist dies ein Attribut der Parser oder der Bandbreite, mit der Sie die Daten übertragen.
Hier ist (am Anfang) eine Liste der Vor- und Nachteile von JSON und XML:
Profi:
Con:
Einfache Syntax, nur eine Handvoll verschiedener Datentypen werden unterstützt.
Keine Unterstützung für Kommentare.
Profi:
Con:
Am Ende müssen Sie sich also entscheiden, was Sie brauchen . Offensichtlich haben beide Formate ihre legitimen Anwendungsfälle. Wenn Sie hauptsächlich JavaScript verwenden, sollten Sie sich für JSON entscheiden.
Bitte zögern Sie nicht, Vor- und Nachteile hinzuzufügen. Ich bin kein XML-Experte;)
id
Attribut innerhalb des Dokuments eindeutig ist.
Die Verarbeitungsgeschwindigkeit ist möglicherweise nicht die einzige relevante Angelegenheit. Da dies jedoch die Frage ist, sind hier einige Zahlen in einem Benchmark aufgeführt: JSON vs. XML: Einige harte Zahlen zur Ausführlichkeit . Für die Geschwindigkeit bietet XML in diesem einfachen Benchmark einen Overhead von 21% gegenüber JSON.
Ein wichtiger Hinweis zur Ausführlichkeit, der, wie der Artikel sagt, die häufigste Beschwerde ist: Dies ist in der Praxis nicht so relevant (weder XML- noch JSON-Daten werden normalerweise von Menschen, sondern von Maschinen verarbeitet), auch wenn dies der Fall ist Geschwindigkeit benötigt es etwas mehr Zeit zum Komprimieren.
In diesem Benchmark wurde auch eine große Datenmenge verarbeitet, und eine typische Webanwendung überträgt keine Datenblöcke mit einer Größe von bis zu 90 MB, und die Komprimierung ist möglicherweise nicht vorteilhaft (für ausreichend kleine Datenblöcke ein komprimierter Block wird größer sein als der unkomprimierte Block), also nicht anwendbar.
Wenn jedoch keine Komprimierung erforderlich ist, wird JSON als offensichtlich kürzer über den Übertragungskanal weniger gewichtet, insbesondere wenn es über eine WebSocket-Verbindung übertragen wird, bei der das Fehlen des klassischen HTTP-Overheads den Unterschied zum Vorteil von JSON noch mehr ausmachen kann von Bedeutung.
Nach der Übertragung sollen Daten verbraucht werden, und diese zählen zur Gesamtverarbeitungszeit. Wenn ausreichend große oder komplexe Daten übertragen werden sollen, erfordert das Fehlen eines Schemas, das automatisch von einem validierenden XML-Parser überprüft wird, möglicherweise eine stärkere Überprüfung der JSON-Daten. Diese Überprüfungen müssten in JavaScript ausgeführt werden, von dem nicht bekannt ist, dass es besonders schnell ist. In solchen Fällen kann dies zu einem zusätzlichen Overhead gegenüber XML führen.
Auf jeden Fall liefert nur das Testen die Antwort für Ihren speziellen Anwendungsfall (wenn Geschwindigkeit wirklich die einzige Sache ist und weder Standard noch Sicherheit noch Integrität…).
Update 1: Erwähnenswert ist EXI, das binäre XML-Format, das eine Komprimierung zu geringeren Kosten als die Verwendung von Gzip bietet und die Verarbeitung spart, die ansonsten zum Dekomprimieren von komprimiertem XML erforderlich ist. EXI ist für XML, was BSON für JSON ist. Haben Sie hier einen kurzen Überblick mit Bezug auf die räumliche und zeitliche Effizienz: EXI: Der letzte Binärstandard? .
Update 2: Es gibt auch binäre XML-Leistungsberichte, die vom W3C durchgeführt werden, da Effizienz und geringer Speicher- und CPU-Platzbedarf auch für den XML-Bereich von Bedeutung sind: Effiziente XML-Austauschbewertung .
Worth in diesem Zusammenhang bemerkt zu werden, da HTTP - Overhead als ein Problem angesprochen wurde: die IANA hat die EXI Codierung (die effizienten binären XML wie oben erwähnt), als aa Inhalt Codierung für das HTTP - Protokoll (neben mit Kompresse , deflate und gzip ) . Dies bedeutet, dass EXI eine Option ist, die von Browsern unter möglicherweise anderen HTTP-Clients verstanden werden kann. Siehe Hypertext Transfer Protocol-Parameter (iana.org) .
Ich fand diesen Artikel auf dem digitalen Basar wirklich interessant. Zitieren ihrer Zitate aus Norm:
Über JSON-Profis:
Wenn Sie nur Atomwerte oder Listen oder Hashes von Atomwerten weitergeben möchten, bietet JSON viele Vorteile von XML: Es ist einfach über das Internet zu verwenden, unterstützt eine Vielzahl von Anwendungen und ist einfach, Programme zur Verarbeitung von JSON zu schreiben. Es verfügt über wenige optionale Funktionen, ist gut lesbar und einigermaßen klar, das Design ist formal und präzise, JSON-Dokumente sind einfach zu erstellen und es wird Unicode verwendet. ...
Über XML-Profis:
XML kann bemerkenswert gut mit dem vollen Reichtum unstrukturierter Daten umgehen. Ich mache mir überhaupt keine Sorgen um die Zukunft von XML, auch wenn der Tod von einem Kader von Web-API-Designern mit Freude gefeiert wird.
Und ich kann nicht widerstehen, ein "Ich habe es dir gesagt!" Token weg in meinem Schreibtisch. Ich freue mich darauf zu sehen, was die JSON-Leute tun, wenn sie aufgefordert werden, umfangreichere APIs zu entwickeln. Wenn sie weniger gut strukturierte Daten austauschen möchten, werden sie diese dann in JSON einbinden? Ich sehe gelegentlich Erwähnungen einer Schemasprache für JSON. Werden andere Sprachen folgen? ...
Ich persönlich stimme Norm zu. Ich denke, dass die meisten Angriffe auf XML von Webentwicklern für typische Anwendungen stammen und nicht wirklich von Integrationsentwicklern. Aber das ist meine Meinung! ;)
{ "foo": 42 }
Welcher Typ ist das Objekt? Um den Mangel an Typ zu beheben, werden folgende Dinge angezeigt : { "__type": "Bar", "foo": 42 }
. In XML hingegen kann der Typ mit dem Elementnamen konnotiert werden : <Bar><foo>42</foo></Bar>
. Nur Lisp und Javascript mögen json;)
Die XML-Datei (Extensible Markup Language) wird häufig als XHR verwendet, da dies eine Standard-Broadcast-Sprache ist, die von jeder Programmiersprache verwendet werden kann und sowohl auf Server- als auch auf Clientseite unterstützt wird. Dies ist daher die flexibelste Lösung. Das XML kann für mehrere Teile getrennt werden, sodass eine bestimmte Gruppe den Teil des Programms entwickeln kann, ohne die anderen Teile zu beeinflussen. Das XML-Format kann auch durch die XML-DTD oder das XML-Schema (XSL) bestimmt und getestet werden.
Der JSON ist ein Datenaustauschformat, das als mögliches Format für JavaScript-Anwendungen immer beliebter wird. Grundsätzlich ist dies ein Objektnotationsarray. JSON hat eine sehr einfache Syntax, die leicht erlernt werden kann. Außerdem unterstützt JavaScript das Parsen von JSON mit der eval
Funktion. Andererseits hat die eval
Funktion Negative. Beispielsweise kann das Programm JSON sehr langsam analysieren und aus Sicherheitsgründen eval
sehr riskant sein. Dies bedeutet nicht, dass der JSON nicht gut ist, nur müssen wir vorsichtiger sein.
Mein Vorschlag ist, dass Sie JSON für Anwendungen mit leichtem Datenaustausch wie Spiele verwenden sollten. Da Sie sich nicht wirklich um die Datenverarbeitung kümmern müssen, ist dies sehr einfach und schnell.
Das XML eignet sich am besten für größere Websites, z. B. Einkaufsseiten oder ähnliches. Das XML kann sicherer und klarer sein. Sie können grundlegende Datenstrukturen und Schemata erstellen, um die Korrektur einfach zu testen und in Teile zu unterteilen.
Ich schlage vor, Sie verwenden XML wegen der Geschwindigkeit und der Sicherheit, aber JSON für leichte Sachen.
Das Wichtigste an JSON ist, die Datenübertragung aus Sicherheitsgründen verschlüsselt zu halten. Kein Zweifel, dass JSON viel schneller ist als XML. Ich habe gesehen, dass XML 100 ms dauert, während JSON nur 60 ms benötigt. JSON-Daten sind einfach zu bearbeiten.