Analyse JSON plus rapidement que XML

je crée une bibliothèque JavaScript sophistiquée pour travailler avec le cadre côté serveur de mon entreprise.

le cadre côté serveur encode ses données dans un format XML simple. Il n'y a pas d'espace de noms fantaisiste ou quelque chose comme ça.

idéalement, j'aimerais analyser toutes les données du navigateur comme JSON. Cependant, si je fais cela, je dois réécrire une partie du code côté serveur pour également cracher JSON. C'est une douleur parce que nous avons des avis publics que je pas facile de changer.

ce qui m'inquiète vraiment ici, c'est la performance dans le navigateur de parsing JSON versus XML. Est-il vraiment une grande différence pour s'en inquiéter? Ou devrais-je choisir exclusivement JSON? Quelqu'un a-t-il de l'expérience ou des points de repère dans la différence de rendement entre les deux?

je me rends compte que la plupart des développeurs web modernes opteraient probablement pour JSON et je peux voir pourquoi. Cependant, je suis vraiment intéressé par la performance. S'il y a une différence énorme prouvée alors je suis prêt à dépenser l'effort supplémentaire en générant côté serveur JSON pour le client.

54
demandé sur geme_hendrix 2011-01-04 20:20:13

11 réponses

JSON devrait être plus rapide puisque c'est js Notation D'objet, ce qui signifie qu'il peut être reconnu nativement par JavaScript. En PHP du côté " GET "des choses, je vais souvent faire quelque chose comme ça:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>

pour plus d'informations, voir ici:

pourquoi tout le monde choisit JSON plutôt que XML pour jQuery?

aussi...dans quel "effort supplémentaire" devez-vous vraiment mettre? "générer" JSON? Vous ne pouvez pas dire que vous construirez la chaîne JSON manuellement? Presque tous les langages modernes Côté Serveur ont des bibliothèques qui convertissent les variables natives en chaînes JSON. Par exemple, la fonction de base de PHP json_encode convertit un tableau associatif comme ceci:

$data = array('test'=>'val', 'foo'=>'bar');

en

{"test": "val", "foo": "bar"}

qui est simplement un objet JavaScript (puisqu'il n'y a pas de tableaux associatifs (à proprement parler) dans JS).

30
répondu treeface 2017-05-23 11:33:13

tout d'abord, je tiens à remercier tous ceux qui ont répondu à ma question. J'ai VRAIMENT apprécier toutes vos réponses.

en ce qui concerne cette question, j'ai effectué quelques recherches supplémentaires en effectuant quelques points de repère. L'analyse qui se passe dans le navigateur. IE 8 est le seul navigateur qui n'a pas d'analyseur JSON natif. Le XML est la même donnée que la version JSON.

Chrome (version 8.0.552.224), JSON: 92ms, XML :90ms

Firefox (version 3.6.13), JSON: 65ms, XML :129ms

IE (version 8.0.6001.18702), JSON: 172ms, XML: 125ms

fait intéressant, Chrome semble avoir presque la même vitesse. S'il vous plaît noter, cela analyse beaucoup de données. Avec des bribes de données, ce n'est probablement pas une grosse affaire.

19
répondu geme_hendrix 2011-01-06 13:24:25

tests ont été fait. en Voilà un . La différence dans certains des navigateurs antérieurs semble être un ordre de grandeur complet (de l'ordre de 10 s de millisecondes au lieu de 100 S DE ms), mais pas massive. Une partie de ceci est dans le temps de réponse du serveur - XML est plus volumineux comme un format de données. Une partie de celui - ci est parsing time-JSON vous permet d'envoyer des objets JavaScript, tandis que XML nécessite l'analyse d'un document.

Vous pourriez envisager d'ajouter à votre public API une méthode pour retourner JSON au lieu de modifier les fonctions existantes si elle devient et émet, à moins que vous ne vouliez pas exposer le JSON.

Voir aussi le question Quand à préférer JSON XML?

8
répondu justkt 2017-05-23 12:34:59

la Performance n'est pas vraiment une considération, en supposant que vous ne parlez pas de gigaoctets de XML. Oui, cela prendra plus de temps (XML est plus verbeux), mais ce ne sera pas quelque chose que l'utilisateur remarquera.

le vrai problème, à mon avis, est le support du XML dans JavaScript. E4X c'est sympa, mais il n'est pas pris en charge par Microsoft. Vous aurez donc besoin d'utiliser une bibliothèque tierce (telle que JQuery) pour analyser le XML.

4
répondu Anon 2011-01-04 17:25:56

si possible, il serait logique de le mesurer. Par "si possible", je veux dire que l'outillage pour javascript (esp. pour l'analyse de la performance) peut ne pas être aussi bon que pour les langages de programmation autonomes.

pourquoi mesurer? Parce que la spéculation basée uniquement sur les propriétés des formats de données n'est pas très utile pour l'analyse des performances -- les intuitions des développeurs sont notoirement faibles pour prédire les performances. Dans ce cas, il signifie simplement que tout se résume à maturité des analyseurs XML et JSON (et des générateurs) utilisés. XML a l'avantage d'avoir été présent plus longtemps; JSON est un peu plus simple à traiter. Ceci basé sur le fait d'avoir réellement écrit des bibliothèques pour traiter les deux. En fin de compte, si toutes les choses sont égales (maturité et optimisation des performances des bibliothèques), JSON peut en effet être un peu plus rapide à traiter. Mais les deux peuvent être très rapides; ou très lents avec de mauvaises implémentations.

cependant: je soupçonne que vous ne devriez pas vous inquiéter tout cela beaucoup sur les performances, comme beaucoup l'ont déjà suggéré. Xml et json peuvent être analysés efficacement, et avec les navigateurs modernes, sont probablement. Il y a des Chances que si vous avez des problèmes de performance, ce n'est pas avec la lecture ou l'écriture de données, mais quelque chose d'autre; et la première étape serait en fait de comprendre ce qu'est le problème réel.

2
répondu StaxMan 2011-01-04 18:16:46

comme JSON est natif et conçu pour Javascript, il va effectuer L'analyse XML toute la journée. vous n'avez pas mentionné votre langage côté serveur, en PHP il y a la fonctionnalité json_encode/json_decode intégrée dans le noyau PHP...

1
répondu FatherStorm 2011-01-04 17:24:52

la différence dans performace sera si minuscule, vous ne le remarquerez même pas (et: vous ne devriez pas penser aux problèmes de performance jusqu'à ce que vous avoir problèmes de performance - Il ya beaucoup de points plus importants à prendre en considération - maintenable, code lisible et documenté...).

mais, pour répondre à la question ayou: JSON sera plus rapide à analyser (parce que c'est une simple notation d'objet javascript).

1
répondu oezi 2011-01-04 17:25:09

dans cette situation, je dirais s'en tenir au XML. Tous les navigateurs principaux ont une interface D'analyse DOM qui analysera du XML bien formé. Ce lien montre une façon d'utiliser l'interface DOMParser dans Webkit / Opera / Firefox, ainsi que L'objet DOM ActiveX dans IE: https://sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring

1
répondu Alex Vidal 2011-01-04 17:27:16

cela dépend aussi de la structure de votre JSON. Les structures arborescentes ont tendance à s'analyser plus efficacement qu'une liste d'objets. C'est là que la compréhension fondamentale des structures de données sera pratique. Je ne serais pas surpris si vous analysez une structure de type liste dans JSON qui pourrait ressembler à ceci:

{
        {
            "name": "New York",
            "country":"USA",
            "lon": -73.948753,
            "lat": 40.712784
        },
        {
            "name": "Chicago",
            "country":"USA",
            "lon": -23.948753,
            "lat": 20.712784
        },
        {
            "name": "London",
            "country":"UK",
            "lon": -13.948753,
            "lat": 10.712784
        }
}

et ensuite le comparer à un arbre comme la structure en XML qui pourrait ressembler à ceci:

<cities>
  <country name="USA">
     <city name="New York">
        <long>-73.948753</long>
        <lat>40.712784</lat>
     </city>
     <city name="Chicago">
        <long>-23.948753</long>
        <lat>20.712784</lat>
     </city>
  </country>
 <country name="UK">
     <city name="London">
        <long>-13.948753</long>
        <lat>10.712784</lat>
     </city>
  </country>
</cities>

la structure XML peut donner un temps plus rapide que celui de JSON car si je boucle à travers le noeud du Royaume-Uni pour trouver Londres, je n'ai pas à boucle à travers le reste des pays pour trouver ma ville. Dans L'exemple de JSON, je pourrais juste si Londres est en bas de la liste. Mais ce que nous avons ici est une différence de structure. Je serais surpris de constater que XML est plus rapide dans les deux cas ou dans un cas où les structures sont exactement les mêmes.

ici est une expérience que j'ai fait utiliser Python-je sais que la question Est d'examiner cela strictement d'un point de vue JavaScript, mais vous pourriez le trouver utile. Les résultats montrent que JSON est plus rapide que XML. Toutefois, le point est: comment structurer va avoir un effet sur la façon dont efficacement, vous êtes en mesure de le récupérer.

1
répondu Mr. Concolato 2014-12-28 15:17:49

analyser ou construire json est relativement facile qu'un xml et aussi la plupart des langues fournissent des méthodes pour l'encodage et le décodage plus facile de json qui est quelque peu complexe avec xml.

0
répondu Praneeth 2014-10-10 06:02:00

meilleur exemple que j'ai trouvé à propos de ces deux est :

http://www.utilities-online.info/xmltojson/#.VVGOlfCYK7M

cela signifie que JSON est plus lisible et compréhensible que XML.

-1
répondu hitesh141 2015-05-12 05:27:20