webentwicklung-frage-antwort-db.com.de

Vorteile der Verwendung von application/json gegenüber text/plain?

Gibt es einen Leistungsvorteil bei der Verwendung des Inhaltstyps application/json, wenn ein an json serialisiertes Objekt über text/plain gesendet wird? Ich weiß, dass viele Frameworks (wie Spring) Daten basierend auf dem Inhaltstyp zuordnen und serialisieren können, aber im Allgemeinen finde ich, dass dieser Prozess so einfach ist, dass es kein zwingender Grund ist, application/json über text/plain für JSON-Objekte zu verwenden .

27
stevebot

Nehmen wir an, Sie sprechen von der Verwendung von JSON im Vergleich zu einem benutzerdefinierten Format (mit dem MIME-Typ text/plain), um strukturierte Daten zu übergeben.

Die Leistung kann in verschiedene Komponenten aufgeteilt werden. z.B.

  • relative Zeit, um den Inhalt in das Format zu kodieren,
  • relative Zeit zum Dekodieren des Formats, um den ursprünglichen Inhalt zu erhalten, und
  • relative Größe des codierten Inhalts.

Theoretisch können wir sagen, dass ein hypothetisches, optimal entworfenes und implementiertes benutzerdefiniertes Format nicht langsamer oder nicht weniger dicht ist als JSON. (Der "Beweis" liegt auf der Hand. Wählen Sie eine optimale Implementierung von JSON und nehmen Sie geringfügige Änderungen am Format vor, die die Leistung nicht beeinträchtigen.)

In der Realität müssen Sie jedoch die Leistung der tatsächlichen Formate und der tatsächlichen Implementierungen vergleichen. Die Antwort darauf, dass die Leistung wirklich davon abhängt, wie gut Sie das Format und die zugehörige Kodierungs-/Dekodierungssoftware entwerfen und implementieren. Darüber hinaus hängt es auch davon ab, wie Sie JSON implementieren. Es gibt eine Reihe serverseitiger JSON-Bibliotheken mit unterschiedlichen Leistungsmerkmalen sowie verschiedene Arten, Daten von/zu "nativen" Datenstrukturen abzubilden.

Dies bringt uns zu den echten Vorteilen von JSON (und XML) gegenüber benutzerdefinierten Formaten.

  • Mit JSON und XML stehen Bibliotheken für jede Hauptsprache zur Verfügung, die Sie zur Kodierung und Dekodierung von Inhalten verwenden. Bei einem benutzerdefinierten Format müssen Sie Ihre eigene Codierung/Decodierung für die Client- und die Serverseite durchführen.

  • Bei JSON und XML gibt es Standards, die angeben, was wohlgeformt ist und anderen Menschen die Implementierung von Encodern/Decodern ermöglicht. Bei einem benutzerdefinierten Format müssen Sie die Spezifikation selbst schreiben, wenn andere Personen Ihr Format implementieren möchten.

  • In JSON und XML gibt es standardisierte Methoden, um Probleme wie die Zeichensatzkodierung und "Meta" -Zeichen in Daten zu behandeln. Mit einem Brauch müssen Sie diese Probleme selbst verstehen und angehen. (Und wenn Sie dies nicht tun, werden Sie wahrscheinlich auf der Strecke in Schwierigkeiten geraten.)

  • Leichtigkeit der Veränderung. Es ist relativ einfach, ein auf JSON/XML basierendes Format zu entwickeln. Mit einem benutzerdefinierten Format haben Sie jedoch (zumindest) mehr Arbeit zu erledigen, und abhängig von Ihren Designentscheidungen kann dies sehr schwierig sein. 

Für die meisten Anwendungen ist diese Themen sind weitaus wichtiger als die Leistung . Deshalb werden JSON oder XML häufig verwendet.

NACHVERFOLGEN

Aber was ist, wenn Sie stattdessen davon ausgehen, dass ich keine benutzerdefinierte Implementierung verwende und das Senden von JSON mit einem MIME-Typ von Text/Plain mit dem von MIME-Typ application/json vergleiche?

Dann ist die Antwort, dass es fast keine Leistung macht. 

  • Sie speichern 6 Byte im HTTP-Anforderungs- oder Antwortheader, da der Mime-Typstring kürzer ist. Dies ist jedoch für typische HTTP-Nachrichten, deren Größen in Tausenden von Bytes angegeben werden, unerheblich.
  • Die Verwendung eines Inhaltstyps "text/plain" macht keinen Unterschied für die Arbeit, die zum Kodieren/Dekodieren der Anforderungs- oder Antwortnachrichten ausgeführt werden muss. Abgesehen von der Zeit, die zum Vergleichen/Kopieren von 6 zusätzlichen Bytes benötigt wird, ist dies wahrscheinlich zu klein messen.

Darüber hinaus ist die Verwendung eines ungenauen MIME-Typs (möglicherweise) eine Verletzung der HTTP-Spezifikationen. Wenn du das tust:

  • es ist wahrscheinlicher, dass der Empfänger die Antwort falsch verarbeitet. z.B. kann sie nicht entschlüsseln oder in einem Browserfenster anzeigen und

  • sie können die Verhandlung mit HTTP-Inhaltstypen unterbrechen, vorausgesetzt, Ihr Client oder Server verwendet sie.

Kurz gesagt, mir fällt kein guter Grund ein, dies zu tun, und ein paar gute Gründe, dies nicht zu tun.

22
Stephen C

JSon ist im Grunde ein Format aus reinem Text. Daher kann es nicht schneller als das beste Nur-Text-Format sein. (Es könnte schneller sein als ein schlecht gewähltes Nur-Text-Format.) JSon wird verwendet, weil es das Kodieren und Dekodieren vereinfacht und für viele Datentypen, insbesondere für komplexe, ziemlich lesbar ist.

Wenn Sie nach einer Alternative suchen, die Sie jetzt verwenden, können Sie vielleicht weitere Details zu den von Ihnen gesendeten Daten angeben, und wir können Alternativen vorschlagen.

10
Peter Lawrey

JSON wird schließlich zusammen mit XML das allgemein akzeptierte Format. Die Akzeptanz von JSON wächst ziemlich schnell, was es zu einer klügeren Entscheidung für Text macht und die Zukunft im Blick hat.

Hier ist die Beschreibung von json.org (LOL) und ich konnte nicht mehr zustimmen:

JSON: Die fettfreie Alternative zu XML

Hier finden Sie Json-Bibliotheken für fast alle Sprachen.

http://www.json.org/

Json ist so einfach mit Jquery http://api.jquery.com/jQuery.getJSON/

Einer der besten Texte, die ich über Json gefunden habe http://ascherconsulting.com/what/are/the/advantages/of/using/json/

Da JSON für den Zweck des Serialisierens und Desaktivierens von Daten, die an und Von JavaScript-Anwendungen gesendet werden, entwickelt wurde, beziehen sich die Vorteile der Verwendung von JSON auf das Vorteile von JSON gegenüber anderen Mitteln der Serialisierung. Das bekannteste Mittel zur Serialisierung von Daten für die Übertragung zu und von Anwendungen Ist derzeit XML. XML ist jedoch ein Ziemlich umständliches Mittel zur Serialisierung. Zunächst muss der Sender Die zu serialisierenden Daten basierend auf Anhand einer Dokumenttypdefinition codieren, die der Empfänger versteht. Auf diese Weise erzeugt Viel zusätzliche Auffüllung Um die tatsächlichen Daten, unabhängig davon, welche DTD verwendet wird. Daher ist die Größe von XML-Dokumenten (.____.) Häufig im Vergleich mit der tatsächlichen Menge von Werten, die sie enthalten, ziemlich groß. Zweitens muss der Empfänger Den Stream von XML empfangen und die Daten dekodieren, um Zu können, und diese Daten dann in den Speicher zu legen. Im Vergleich mit Ist die Serialisierung von Daten Mit JSON durch den Sender relativ Schnell und kompakt, da die - Struktur von JSON die - Struktur widerspiegelt von Standard-Programmierdaten - Typen und der Kodierungsmechanismus addiert nur die Mindestanzahl von Zeichen , die erforderlich ist, um die Struktur und den Wert der Daten anzugeben. Nachdem der Empfänger Die JSON-serialisierten Daten erhalten hat, , Ist die einzige Verarbeitung, die erforderlich ist, um Zu erfolgen, den Text der Zeichenfolge Mit einem der beiden JavaScript-Codes eingebaute Eval-Funktion oder eine kompatible Funktion in einer anderen Sprache. Der Andere Standardvergleich ist YAML, , Der in der Lage ist, komplexe Datensätze zu serialisieren, ohne sich auf eine DTD Zu verlassen, und benötigt einen einfacheren Parser für beide [.____. .] Lesen und Schreiben als XML. Jedoch erfordern selbst die vereinfachten YAML-Parser Im Allgemeinen mehr Zeit und Erzeugen größere serialisierte Datenströme Als JSON.

4
Ives.me

JSON wird wahrscheinlich aufgrund größerer Optimierungen (C-Code) für die JSON-Engine schneller sein. Zum Beispiel ist JSON.parse () von V8 extrem schnell.

3
Alfred

Von den anderen Vorteilen, die JSon formatiert, sind ähnliche Javascript-Objektdeklarationen, damit sie einfacher und schneller analysiert werden können.

JSon-String: {Name: Wertname2: Wert}

Sehr einfach zu Javascript Objekt zu transformieren.

1
Soundpin