Quiero saber cuál es más rápido: ¿XML y JSON? ¿Cuándo usar cuál?
Quiero saber cuál es más rápido: ¿XML y JSON? ¿Cuándo usar cuál?
Respuestas:
Antes de responder cuándo usar cuál, un poco de historia:
editar: Debo mencionar que esta comparación es realmente desde la perspectiva de usarlos en un navegador con JavaScript. No es la forma en formato de datos o bien tiene que ser utilizado, y hay un montón de buenos programas de análisis que cambiarán los detalles para hacer lo que estoy diciendo no muy válida.
JSON es a la vez más compacto y (en mi opinión) más legible: en la transmisión puede ser "más rápido" simplemente porque se transfieren menos datos.
En el análisis, depende de su analizador. Un analizador que convierte el código (ya sea JSON o XML) en una estructura de datos (como un mapa) puede beneficiarse de la naturaleza estricta de XML (los esquemas XML desambiguan muy bien la estructura de datos); sin embargo, en JSON el tipo de elemento (String / Número / Objeto JSON anidado) se puede inferir sintácticamente, por ejemplo:
myJSON = {"age" : 12,
"name" : "Danielle"}
El analizador no necesita ser lo suficientemente inteligente como para darse cuenta de que 12
representa un número (y Danielle
es una cadena como cualquier otra). Entonces en javascript podemos hacer:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
En XML tendríamos que hacer algo como lo siguiente:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(como un aparte, esto ilustra el punto de que XML es bastante más detallado; una preocupación por la transmisión de datos). Para usar estos datos, lo ejecutaremos a través de un analizador, luego tendremos que llamar a algo como:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
En realidad, un buen analizador podría escribirlo age
por ti (por otro lado, es posible que no quieras que lo haga). Lo que sucede cuando accedemos a estos datos es que, en lugar de hacer una búsqueda de atributos como en el ejemplo JSON anterior, estamos haciendo una búsqueda de mapa en la clave name
. Puede ser más intuitivo formar el XML de esta manera:
<person name="Danielle" age="12" />
Pero aún tendríamos que hacer búsquedas de mapas para acceder a nuestros datos:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
EDITAR: Original:
En la mayoría de los lenguajes de programación (no todos, de ninguna manera), una búsqueda de mapa como esta será más costosa que una búsqueda de atributos (como lo hicimos arriba cuando analizamos el JSON).
Esto es engañoso: recuerde que en JavaScript (y otros lenguajes dinámicos) no hay diferencia entre una búsqueda de mapa y una búsqueda de campo. De hecho, una búsqueda de campo es solo una búsqueda de mapa.
Si desea una comparación que realmente valga la pena, lo mejor es compararla: realice las evaluaciones comparativas en el contexto en el que planea utilizar los datos.
Mientras escribía, Felix Kling ya ha presentado una respuesta bastante sucinta comparándolas en términos de cuándo usar cada una, por lo que no continuaré más.
Más rápido no es un atributo de JSON o XML o un resultado que arrojaría una comparación entre ellos. Si hay alguno, entonces es un atributo de los analizadores o el ancho de banda con el que transmite los datos.
Aquí está (el comienzo de) una lista de ventajas y desventajas de JSON y XML:
Pro:
Estafa:
Sintaxis simple, solo se admiten unos pocos tipos de datos diferentes.
No hay soporte para comentarios.
Pro:
Estafa:
Así que al final tienes que decidir qué necesitas . Obviamente, ambos formatos tienen sus casos de uso legítimo. Si vas a usar JavaScript principalmente, entonces deberías usar JSON.
Por favor, siéntase libre de agregar pros y contras. No soy un experto en XML;)
id
atributo sea único dentro del documento.
La velocidad de procesamiento puede no ser el único asunto relevante, sin embargo, como esa es la pregunta, aquí hay algunos números en un punto de referencia: JSON vs. XML: Algunos números concretos sobre la verbosidad . Para la velocidad, en este punto de referencia simple, XML presenta una sobrecarga del 21% sobre JSON.
Una nota importante sobre la verbosidad, que es como dice el artículo, es la queja más común: esto no es tan relevante en la práctica (ni los datos XML ni JSON son manejados por humanos, sino por máquinas), incluso si se trata de velocidad, requiere más tiempo razonable para comprimir.
Además, en este punto de referencia, se procesó una gran cantidad de datos, y una aplicación web típica no transmitirá fragmentos de datos de tales tamaños, tan grandes como 90 MB, y la compresión puede no ser beneficiosa (para fragmentos de datos lo suficientemente pequeños, un fragmento comprimido será más grande que el fragmento sin comprimir), por lo que no es aplicable.
Aún así, si no se trata de compresión, JSON, como obviamente más terser, pesará menos sobre el canal de transmisión, especialmente si se transmite a través de una conexión WebSocket, donde la ausencia de la sobrecarga HTTP clásica puede marcar la diferencia en la ventaja de JSON, incluso más significativo.
Después de la transmisión, los datos deben ser consumidos, y esto cuenta en el tiempo de procesamiento general. Si se van a transmitir datos suficientemente grandes o complejos, la falta de un esquema verificado automáticamente por un analizador XML de validación puede requerir una mayor verificación de los datos JSON; estas comprobaciones tendrían que ejecutarse en JavaScript, que no se sabe que sea particularmente rápido, por lo que puede presentar una sobrecarga adicional sobre XML en tales casos.
De todos modos, solo las pruebas proporcionarán la respuesta para su caso de uso particular (si la velocidad es realmente el único asunto, y no es estándar, ni seguridad ni integridad ...).
Actualización 1: vale la pena mencionar, es EXI, el formato binario XML, que ofrece compresión a un costo menor que el uso de Gzip, y guarda el procesamiento que de otra forma sería necesario para descomprimir XML comprimido. EXI es para XML, lo que BSON es para JSON. Tenga una descripción general rápida aquí, con alguna referencia a la eficiencia tanto en espacio como en tiempo: EXI: ¿El último estándar binario? .
Actualización 2: también existe un informe de rendimiento XML binario, llevado a cabo por el W3C, ya que la eficiencia y la baja memoria y huella de la CPU, también es un tema para el área XML: Evaluación eficiente de intercambio XML .
Vale la pena notar en este contexto, ya que la sobrecarga de HTTP se planteó como un problema: la IANA ha registrado la codificación EXI (el eficiente XML binario mencionado anteriormente), como una codificación de contenido para el protocolo HTTP (junto con comprimir , desinflar y gzip ) . Esto significa que EXI es una opción que los navegadores pueden comprender entre otros posibles clientes HTTP. Consulte Parámetros del protocolo de transferencia de hipertexto (iana.org) .
Encontré este artículo en el bazar digital realmente interesante. Citando sus citas de la norma:
Sobre los profesionales de JSON:
Si todo lo que desea transmitir son valores atómicos o listas o valores hash de valores atómicos, JSON tiene muchas de las ventajas de XML: es directamente utilizable en Internet, admite una amplia variedad de aplicaciones, es fácil escribir programas para procesar JSON, tiene pocas características opcionales, es legible para los humanos y razonablemente claro, su diseño es formal y conciso, los documentos JSON son fáciles de crear y utiliza Unicode. ...
Acerca de los profesionales XML:
XML trata notablemente bien con la riqueza completa de datos no estructurados. No estoy preocupado por el futuro de XML, incluso si su muerte es celebrada alegremente por un grupo de diseñadores de API web.
Y no puedo resistir meter un "¡Te lo dije!" ficha en mi escritorio. Espero ver qué hacen los amigos de JSON cuando se les pide que desarrollen API más completas. Cuando quieran intercambiar datos menos estructurados, ¿lo incluirán en JSON? Veo menciones ocasionales de un lenguaje de esquema para JSON, ¿seguirán otros idiomas? ...
Personalmente estoy de acuerdo con Norm. Creo que la mayoría de los ataques a XML provienen de desarrolladores web para aplicaciones típicas, y no de desarrolladores de integración. ¡Pero esa es mi opinión! ;)
{ "foo": 42 }
¿De qué tipo es ese objeto? A continuación, para fijar la falta de tipo, cosas como esta muestra arriba: { "__type": "Bar", "foo": 42 }
. En XML en el tipo de contraste puede ser connotado al nombre del elemento: <Bar><foo>42</foo></Bar>
. Solo chicos de lisp y javascript como json;)
El XML (Lenguaje de marcado extensible) se usa a menudo XHR porque es un lenguaje de transmisión estándar, lo que puede ser utilizado por cualquier lenguaje de programación y es compatible con el lado del servidor y del cliente, por lo que esta es la solución más flexible. El XML se puede separar para más partes para que un grupo específico pueda desarrollar la parte del programa, sin afectar las otras partes. El formato XML también puede determinarse mediante el DTD XML o el Esquema XML (XSL) y puede probarse.
El JSON es un formato de intercambio de datos que se está volviendo más popular como el formato posible de las aplicaciones JavaScript. Básicamente se trata de una matriz de notación de objetos. JSON tiene una sintaxis muy simple, por lo que se puede aprender fácilmente. Y también el JavaScript admite el análisis de JSON con la eval
función. Por otro lado, la eval
función tiene negativos. Por ejemplo, el programa puede ser muy lento al analizar JSON y, debido a la seguridad, eval
puede ser muy arriesgado. Esto no significa que el JSON no sea bueno, solo tenemos que tener más cuidado.
Mi sugerencia es que debe usar JSON para aplicaciones con intercambio de datos ligero, como juegos. Debido a que no tiene que preocuparse realmente por el procesamiento de datos, esto es muy simple y rápido.
El XML es el mejor para los sitios web más grandes, por ejemplo, sitios de compras o algo así. El XML puede ser más seguro y claro. Puede crear una estructura de datos básica y un esquema para probar fácilmente la corrección y separarla en partes fácilmente.
Le sugiero que use XML debido a la velocidad y la seguridad, pero JSON para cosas livianas.
Lo importante de JSON es mantener cifrada la transferencia de datos por razones de seguridad. Sin duda, JSON es mucho más rápido que XML. He visto XML tomar 100 ms, mientras que JSON solo tomó 60 ms. Los datos JSON son fáciles de manipular.