2009-06-14 12 views
14

Estoy creando clases que interactúan con la API de Twitter, y me pregunto si el analizador incorporado de XML o JSON de PHP es más rápido. Twitter me enviará los mismos datos en cualquier formato, por lo que el rendimiento de PHP determinará mi elección. Estoy usando php_apc, por lo que puedes ignorar el tiempo de análisis y asumir que estoy ejecutando bytecode.PHP: ¿es más rápido el analizador JSON o XML?

Gracias!

más: Estoy buscando para obtener matrices asociativas de los datos. No estoy haciendo walking tree, iteración de nodos ni nada demasiado complejo. El formato siempre será el mismo. (Espero!)

+7

¿Por qué no compararlo usted mismo en los conjuntos de datos reales que va a utilizar? El rendimiento del analizador puede ser bastante dependiente de lo que alimente. –

+1

¿Cuál de los PHP xml-apis planea usar? Supongo que SimpleXML y DOM son más lentos o están a la par con JSON, mientras que XMLReader o SAX son más rápidos. –

Respuesta

10

no hice ningún punto de referencia, pero ...

Desde JSON es sólo una descripción de las secuencias de cadena anidadas, sin la necesidad de ofrecer una interfaz DOM, atributos de análisis y otras cosas sutiles , mi suposición es que un analizador JSON es MUCHO más rápido que un analizador XML.

+1

Estoy de acuerdo.JSON tiene una estructura mucho más simple y menos dinámica. – Blixt

+4

El análisis del formato JSON es mucho más complicado que el XML bien definido. La cadena de análisis es un trabajo muy complicado, tal vez porque utiliza la función de biblioteca estándar, no lo siente, pero es mucho más simple analizar el XML estructurado que los datos estructurados en JSON. –

+0

Si solo considera el análisis puro, JSON debería ser mucho más rápido. Pero también depende del uso de los datos analizados. –

1

La respuesta depende de cómo piensas usarla. Es decir, si crea una solicitud y la procesa dentro del script PHP, creo que XML será mucho más rápido. Pero una vez que considere crear llamadas AJAX y un posterior proceso de resultado, debería considerar usar JSON, ya que se beneficia de la representación automática de JavaScript del resultado JSON como un objeto, admite la solicitud de dominio cruzado con funciones de devolución de llamada, mientras que para XML .

0

JSON tiende a ser mucho más pequeños en tamaño

también ejecuta json_decode una vez y luego acceder a los datos como una matriz ningún uso para cualquier otra función.

Sin ejecutar los puntos de referencia ID ir con JSON es más rápido

17

El comentario de Adam anterior me convenció de establecer criterios de referencia. Usando https://twitter.com/status/mentions.[format], encontré que simplexml_load_string() es LIGERAMENTE más rápido que json_decode(). Pero la diferencia es prácticamente un margen de error.

Test #1 time (xml): 3.75221395493 seconds 
Test #2 time (xml): 4.1562371254 seconds 
Test #3 time (xml): 3.60420489311 seconds 
Test #4 time (xml): 3.85622000694 seconds 
Test #5 time (xml): 3.89622211456 seconds 

frente

Test #1 time (json): 4.53225803375 seconds 
Test #2 time (json): 4.06823205948 seconds 
Test #3 time (json): 4.03222990036 seconds 
Test #4 time (json): 3.80421590805 seconds 
Test #5 time (json): 3.88022208214 seconds 

sobre el código siguiente (donde ya he curl'ed los datos en un archivo, los datos. [XML, JSON]).

<?php 

$test = 'json'; //xml or json 
$data = implode(file("data.".$test),"\r\n"); 

for ($t=1; $t<=5; $t++) { 
    $start[$t] = microtime(1); 
    for ($i=0; $i<3000; $i++) { 
     if ($test == 'xml') $xml = simplexml_load_string($data); 
     else $json = json_decode($data); 
    } 
    $end[$t] = microtime(1); 
    echo "<p>Test #{$t} time ({$test}): " . ($end[$t] - $start[$t]). " seconds</p>"; 
} 
+14

Sin embargo, esta prueba no lee los datos del objeto XML después de cargarlos. Mientras que json_decode devuelve una matriz simple, SimpleXML proporciona un objeto con métodos especiales para leer los datos, incluida alguna magia dinámica. Esto podría afectar el rendimiento. –

4

que tienden a encontrar que simplexml_load_string() es más rápido que json_decode() cuando el retorno JSON es un objeto.

Sin embargo, tener el json devuelto como una matriz usando json_decode ($ string, true) es en realidad mucho más rápido que usar un objeto (como ocurre con la mayoría de las cosas PHP cuando se comparan matrices con objetos).

He visto que json_decode() es más del doble de rápido que simplexml_load_string() en estas circunstancias.

1

¿Ha considerado cómo el ahorro total de ancho de banda podría afectar el rendimiento de su script? Si sus solicitudes van a repetirse, una cantidad significativa de tiempo usando JSON debería ser la opción económica más sólida.

Cuestiones relacionadas