Je veux savoir lequel est le plus rapide: XML et JSON? Quand utiliser lequel?
Je veux savoir lequel est le plus rapide: XML et JSON? Quand utiliser lequel?
Réponses:
Avant de répondre quand utiliser lequel, un petit historique:
edit: je dois mentionner que cette comparaison est vraiment du point de vue de les utiliser dans un navigateur avec JavaScript. Ce n'est pas la façon dont l'un ou l'autre format de données doit être utilisé, et il y a beaucoup de bons analyseurs qui changeront les détails pour rendre ce que je dis pas tout à fait valide.
JSON est à la fois plus compact et (à mon avis) plus lisible - en transmission, il peut être "plus rapide" simplement parce que moins de données sont transférées.
Dans l'analyse, cela dépend de votre analyseur. Un analyseur transformant le code (que ce soit JSON ou XML) en une structure de données (comme une carte) peut bénéficier de la nature stricte de XML ( les schémas XML désambiguïsent bien la structure de données) - cependant en JSON le type d'un élément (String / Number / Nested JSON Object) peut être déduit syntaxiquement, par exemple:
myJSON = {"age" : 12,
"name" : "Danielle"}
L'analyseur n'a pas besoin d'être suffisamment intelligent pour se rendre compte qu'il 12
représente un nombre (et Danielle
est une chaîne comme les autres). Donc en javascript on peut faire:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
En XML, nous devons faire quelque chose comme ceci:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(en passant, cela illustre le fait que XML est plutôt plus verbeux; une préoccupation pour la transmission de données). Pour utiliser ces données, nous les exécutions via un analyseur, puis nous devions appeler quelque chose comme:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
En fait, un bon analyseur pourrait bien taper le age
pour vous (d'un autre côté, vous pourriez ne pas le vouloir). Ce qui se passe lorsque nous accédons à ces données est - au lieu de faire une recherche d'attribut comme dans l'exemple JSON ci-dessus - nous faisons une recherche de carte sur la clé name
. Il pourrait être plus intuitif de former le XML comme ceci:
<person name="Danielle" age="12" />
Mais nous aurions encore à faire des recherches de carte pour accéder à nos données:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
EDIT: Original:
Dans la plupart des langages de programmation (pas tous, par n'importe quel tronçon), une recherche de carte comme celle-ci sera plus coûteuse qu'une recherche d'attribut (comme nous l'avons vu ci-dessus lorsque nous avons analysé le JSON).
C'est trompeur: rappelez-vous qu'en JavaScript (et dans d'autres langages dynamiques), il n'y a pas de différence entre une recherche de carte et une recherche de champ. En fait, une recherche de champ n'est qu'une recherche de carte.
Si vous voulez une comparaison vraiment valable, le mieux est de la comparer - faites les références dans le contexte où vous prévoyez d'utiliser les données.
Comme je l'ai tapé, Felix Kling a déjà mis en place une réponse assez succincte en les comparant en termes de moment à utiliser chacun, donc je n'irai pas plus loin.
Plus rapide n'est pas un attribut de JSON ou XML ou un résultat qu'une comparaison entre ceux-ci donnerait. Le cas échéant, il s'agit d'un attribut des analyseurs ou de la bande passante avec laquelle vous transmettez les données.
Voici (le début de) une liste des avantages et des inconvénients de JSON et XML:
Pro:
Con:
Syntaxe simple, seuls quelques types de données différents sont pris en charge.
Aucun support pour les commentaires.
Pro:
Con:
Donc, à la fin, vous devez décider de ce dont vous avez besoin . Évidemment, les deux formats ont leurs cas d'utilisation légitimes. Si vous allez surtout utiliser JavaScript, vous devriez opter pour JSON.
N'hésitez pas à ajouter des avantages et des inconvénients. Je ne suis pas un expert XML;)
id
attribut à être unique dans le document.
La vitesse de traitement n'est peut-être pas la seule question pertinente, cependant, comme c'est la question, voici quelques chiffres dans un benchmark: JSON vs XML: Quelques chiffres précis sur la verbosité . Pour la vitesse, dans ce benchmark simple, XML présente une surcharge de 21% sur JSON.
Une note importante sur la verbosité, qui est, comme le dit l'article, la plainte la plus courante: ce n'est pas tellement pertinent dans la pratique (ni les données XML ni JSON ne sont généralement gérées par les humains, mais par les machines), même si vitesse, il faut un peu plus de temps raisonnable pour compresser.
De plus, dans ce cas-ci, une grande quantité de données a été traitée, et une application Web typique ne transmettra pas de blocs de données de telles tailles, pouvant atteindre 90 Mo, et la compression peut ne pas être bénéfique (pour des blocs de données suffisamment petits, un bloc compressé sera plus grand que le morceau non compressé), donc non applicable.
Pourtant, si aucune compression n'est impliquée, JSON, comme évidemment terser, pèsera moins sur le canal de transmission, surtout s'il est transmis via une connexion WebSocket, où l'absence de la surcharge HTTP classique peut faire la différence à l'avantage de JSON, encore plus important.
Après la transmission, les données doivent être consommées, et cela compte dans le temps de traitement global. Si des données volumineuses ou suffisamment complexes doivent être transmises, l'absence d'un schéma automatiquement vérifié par un analyseur XML de validation peut nécessiter un contrôle plus approfondi des données JSON; ces vérifications devraient être exécutées en JavaScript, qui n'est pas connu pour être particulièrement rapide, et il peut donc présenter une surcharge supplémentaire par rapport à XML dans de tels cas.
Quoi qu'il en soit, seuls les tests fourniront la réponse à votre cas d'utilisation particulier (si la vitesse est vraiment la seule question, et non standard, ni sécurité ni intégrité…).
Mise à jour 1: il convient de mentionner EXI, le format XML binaire, qui offre une compression à moindre coût que l'utilisation de Gzip, et économise le traitement autrement nécessaire pour décompresser le XML compressé. EXI est au XML, ce que BSON est au JSON. Avoir un aperçu rapide ici, avec quelques références à l'efficacité dans l'espace et le temps: EXI: Le dernier standard binaire? .
Mise à jour 2: il existe également un rapport de performance XML binaire, mené par le W3C, car l'efficacité et la faible mémoire et l'encombrement du processeur sont également une question pour le domaine XML: Efficient XML Interchange Evaluation .
Cela vaut la peine d'être remarqué dans ce contexte, car la surcharge HTTP a été soulevée comme un problème: l'IANA a enregistré le codage EXI (le XML binaire efficace mentionné ci-dessus), en tant que codage de contenu pour le protocole HTTP (avec compresser , dégonfler et gzip ) . Cela signifie qu'EXI est une option qui devrait être comprise par les navigateurs parmi les autres clients HTTP. Voir Paramètres de protocole de transfert hypertexte (iana.org) .
J'ai trouvé cet article au bazar numérique très intéressant. Citant leurs citations de Norm:
À propos des professionnels JSON:
Si tout ce que vous souhaitez faire circuler sont des valeurs atomiques ou des listes ou des hachages de valeurs atomiques, JSON a de nombreux avantages de XML: il est facilement utilisable sur Internet, prend en charge une grande variété d'applications, il est facile d'écrire des programmes pour traiter JSON, il a peu de fonctionnalités optionnelles, il est lisible par l'homme et raisonnablement clair, sa conception est formelle et concise, les documents JSON sont faciles à créer et il utilise Unicode. ...
À propos des pros XML:
XML gère remarquablement bien toute la richesse des données non structurées. Je ne suis pas du tout inquiet pour l'avenir de XML, même si sa mort est joyeusement célébrée par un groupe de concepteurs d'API Web.
Et je ne peux pas résister à un "Je te l'avais dit!" jeton dans mon bureau. J'ai hâte de voir ce que font les gens JSON lorsqu'ils sont invités à développer des API plus riches. Quand ils veulent échanger des données moins bien structurées, les transforment-ils en JSON? Je vois des mentions occasionnelles d'un langage de schéma pour JSON, d'autres langues suivront-elles? ...
Je suis personnellement d'accord avec Norm. Je pense que la plupart des attaques contre XML proviennent de développeurs Web pour des applications typiques, et pas vraiment de développeurs d'intégration. Mais c'est mon avis! ;)
{ "foo": 42 }
De quel type est cet objet? Ensuite, pour corriger le manque de type, des choses comme ça up show: { "__type": "Bar", "foo": 42 }
. En XML dans le type de contraste peut être connoté au nom de l' élément: <Bar><foo>42</foo></Bar>
. Seuls les gars lisp et javascript comme json;)
Le XML (extensible Markup Language) est souvent utilisé XHR car il s'agit d'un langage de diffusion standard, qui peut être utilisé par n'importe quel langage de programmation, et pris en charge à la fois côté serveur et côté client, c'est donc la solution la plus flexible. Le XML peut être séparé pour plusieurs parties afin qu'un groupe spécifié puisse développer la partie du programme, sans affecter les autres parties. Le format XML peut également être déterminé par la DTD XML ou le schéma XML (XSL) et peut être testé.
Le JSON est un format d'échange de données qui devient de plus en plus populaire en tant que format possible des applications JavaScript. Fondamentalement, il s'agit d'un tableau de notation d'objet. JSON a une syntaxe très simple et peut donc être facilement apprise. Et aussi le support JavaScript analysant JSON avec la eval
fonction. En revanche, la eval
fonction a des points négatifs. Par exemple, le programme peut être très lent à analyser JSON et, pour des raisons de sécurité, il eval
peut être très risqué. Cela ne signifie pas que le JSON n'est pas bon, il faut juste être plus prudent.
Ma suggestion est que vous devriez utiliser JSON pour les applications avec un échange léger de données, comme les jeux. Parce que vous n'avez pas vraiment à vous soucier du traitement des données, c'est très simple et rapide.
Le XML est le meilleur pour les grands sites Web, par exemple les sites commerciaux ou quelque chose comme ça. Le XML peut être plus sûr et plus clair. Vous pouvez créer une structure de données et un schéma de base pour tester facilement la correction et la séparer facilement en plusieurs parties.
Je vous suggère d'utiliser XML en raison de la vitesse et de la sécurité, mais JSON pour des trucs légers.
L'important à propos de JSON est de garder le transfert de données crypté pour des raisons de sécurité. Nul doute que JSON est beaucoup plus rapide que XML. J'ai vu XML prendre 100 ms alors que JSON ne prenait que 60 ms. Les données JSON sont faciles à manipuler.