web-dev-qa-db-fra.com

Les avantages d'utiliser application/json par rapport à text/plain?

Existe-t-il un avantage en termes de performances grâce à l’utilisation du type de contenu application/json lors de l’envoi d’un objet sérialisé vers json par rapport à text/plain? Je sais que de nombreux frameworks (tels que Spring) peuvent mapper et sérialiser des données en fonction du type de contenu, mais en général, je trouve que ce processus est assez simple et qu'il n'est pas une raison convaincante d'utiliser application/json sur text/plain pour les objets JSON. .

27
stevebot

Supposons que vous parlez de l'utilisation de JSON par rapport à un format personnalisé (utilisant le type MIME text/plain) pour transmettre des données structurées.

Les performances peuvent être décomposées en différents composants; par exemple.

  • temps relatif nécessaire pour encoder le contenu dans le format,
  • temps relatif nécessaire pour décoder le format afin de vous donner le contenu original, et
  • taille relative du contenu encodé.

En théorie, nous pouvons dire qu'un format personnalisé hypothétique conçu et implémenté de manière optimale ne sera ni plus lent ni moins dense que JSON. (La "preuve" est évidente. Choisissez une implémentation optimale de JSON et modifiez légèrement le format sans affecter les performances.)

En réalité cependant, vous devez comparer les performances des formats et des implémentations réels. La réponse est donc que les performances dépendent vraiment de la qualité de votre travail de conception et de mise en œuvre du format et du logiciel de codage/décodage associé. En outre, cela dépend également de la manière dont vous implémentez JSON. Il existe un certain nombre de bibliothèques JSON côté serveur avec différentes caractéristiques de performances, ainsi que différentes manières de mapper des données à partir de/vers des structures de données "natives".

Cela nous amène aux avantages réels de JSON (et XML) par rapport aux formats personnalisés.

  • Avec JSON et XML, des bibliothèques sont disponibles pour toutes les langues courantes que vous avez choisies pour vous aider à coder et à décoder du contenu. Avec un format personnalisé, vous devez lancer votre propre encodage/décodage pour les côtés client et serveur.

  • Avec JSON et XML, certaines normes indiquent ce qui est bien formé et permettent à d’autres personnes d’implémenter des encodeurs/décodeurs. Avec un format personnalisé, vous devez écrire vous-même la spécification si vous souhaitez que d'autres personnes puissent implémenter votre format.

  • JSON et XML ont des méthodes standard pour traiter des problèmes tels que l'encodage de caractères et les caractères "méta" apparaissant dans les données. Avec une coutume, vous devez comprendre et résoudre ces problèmes vous-même. (Et si vous ne le faites pas, vous risquez de rencontrer des difficultés sur la piste.)

  • Facilité de changement. Il est relativement simple de développer un format basé sur JSON/XML. Mais avec un format personnalisé, vous avez (au moins) plus de travail à faire et, selon vos choix de conception, cela peut s'avérer très difficile. 

Pour la plupart des applications, ces problèmes sont beaucoup plus importants que les performances . Et c'est pourquoi JSON ou XML sont largement utilisés.

SUIVRE

Mais que se passe-t-il si au lieu de cela vous supposez que je n'utilise pas d'implémentation personnalisée et que vous comparez l'envoi de JSON avec un type mime de text/plain à celui de type mime application/json?

Ensuite, la réponse est que cela fait presque pas performance différence. 

  • Vous enregistrez 6 octets dans l'en-tête de requête ou de réponse HTTP, car la chaîne de type mime est plus courte, mais cet élément est insignifiant pour les messages HTTP classiques dont la taille est mesurée en milliers d'octets.
  • L'utilisation d'un type de contenu "text/plain" n'a aucune incidence sur le travail à effectuer pour coder/décoder la requête ou les messages de réponse ... en dehors du temps nécessaire pour comparer/copier 6 octets supplémentaires, ce qui est probablement trop petit. mesurer.

De plus, l'utilisation d'un type MIME inexact est (sans doute) une violation des spécifications HTTP. Si tu fais ça:

  • il est plus probable que le destinataire manipule mal la réponse; par exemple. ne pas le décoder, ou l'afficher dans une fenêtre de navigateur, et

  • vous pouvez interrompre la négociation du type de contenu HTTP en supposant que votre client ou serveur l'utilise.

En bref, je ne peux penser à aucun bon raison de le faire, et à quelques bon raisons de ne pas le faire.

22
Stephen C

JSon est fondamentalement un format de texte brut. En tant que tel, il ne peut pas être plus rapide que le meilleur format de texte brut. (Cela pourrait être plus rapide qu'un format de texte brut mal choisi) JSon est utilisé car il facilite l'encodage et le décodage et est assez lisible par l'homme pour de nombreux types de données, en particulier complexes.

Si vous recherchez une alternative à celle que vous utilisez actuellement, vous pourriez peut-être donner plus de détails sur les données que vous envoyez et nous pouvons suggérer des alternatives.

10
Peter Lawrey

JSON finira par devenir le format largement accepté avec XML. L'acceptation de JSON s'accroît assez rapidement, ce qui en fait un choix judicieux par rapport au texte, tout en gardant à l'esprit l'avenir.

Voici la description de json.org (LOL) et je suis tout à fait d'accord avec cela:

JSON: l'alternative sans gras au XML

Vous trouverez ici des bibliothèques Json pour presque toutes les langues.

http://www.json.org/

Json est si facile avec Jquery http://api.jquery.com/jQuery.getJSON/

Un des meilleurs textes que j'ai trouvé sur Json http://ascherconsulting.com/what/are/the/advantages/of/using/json/

Étant donné que JSON a été conçu dans le but De sérialiser et de Désérialiser les données envoyées à et À partir d'applications JavaScript, les avantages de à utiliser JSON se rapportent à des avantages de JSON par rapport aux autres moyens de sérialisation . Le moyen le plus connu De sérialiser les données pour la transmission aux applications actuellement est le XML. Pourtant, XML est un Moyen assez lourd de sérialisation . Tout d'abord, l'expéditeur doit Coder les données à sérialiser en fonction de Sur une définition de type de document que le destinataire Comprend. Cela Crée beaucoup de remplissage supplémentaire Autour des données réelles, quelle que soit la DTD utilisée. Ainsi, la taille des documents XML Est souvent assez grande en comparaison de Avec l'ensemble des valeurs Qu'ils contiennent. Deuxièmement, le destinataire Doit recevoir le flux de XML et décoder les données afin de , Puis mettre ces données en mémoire. En comparaison, la sérialisation des données À l'aide de JSON par l'expéditeur est relativement rapide et compacte, car la structure De JSON reflète la structure . des types de données de programmation standard et du mécanisme de codage ajoute seulement le nombre minimal de caractères requis pour indiquer la structure et la valeur des données. Une fois que le destinataire A reçu les données sérialisées JSON, , Le seul traitement à effectuer pour Consiste à évaluer le texte de la chaîne À l'aide de fonction eval intégrée ou une fonction compatible dans une autre langue. L’autre comparaison standard Est YAML, Qui permet de sérialiser des ensembles de données Complexes sans faire appel à une DTD Et nécessite un analyseur syntaxique plus simple pour les deux. .] lire et écrire que XML. Cependant, Même les analyseurs syntaxiques YAML simplifiés Nécessitent généralement plus de temps et Génèrent des flux de données sérialisés Plus importants que JSON.

4
Ives.me

JSON sera probablement plus rapide en raison des optimisations majeures (code C) du moteur JSON. Par exemple, JSON.parse () de V8 est extrêmement rapide.

3
Alfred

Parmi les autres avantages, les chaînes au format JSon sont similaires à la déclaration d'objet javascript, ce qui permet une analyse plus simple et plus rapide.

JSon string: {name: value name2: value}

Très facile à transformer en objet javascript.

1
Soundpin