2008-10-17 10 views
7

Estoy comenzando a desarrollar una aplicación web en PHP que espero se vuelva increíblemente popular y me haga famoso y rico. :-)¿Qué significa menos carga en un servidor PHP: SimpleXML o json_decode?

Si llega el momento, mi decisión de analizar los datos de la API como XML con SimpleXML o utilizar json_decode podría marcar una diferencia en la escalabilidad de la aplicación.

¿Alguien sabe cuál de estos enfoques es más eficiente para el servidor?

Actualización: Realicé una prueba rudimentaria para ver qué método era más eficaz. Parece que json_decode se ejecuta un poco más rápido que simplexml_load_string. Esto no es terriblemente concluyente porque no prueba cosas como la escalabilidad de procesos concurrentes. Mi conclusión es que iré con SimpleXML por el momento debido a su compatibilidad con expresiones XPath.

<?php 

$xml = file_get_contents('sample.xml'); 
$json = file_get_contents('sample.js'); 

$iters = 1000; 

// simplexml_load_string 
$start_xml = microtime(true); 
for ($i = 0; $i < $iters; ++$i) { 
    $obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
} 
$end_xml = microtime(true); 

// json_decode 
$start_json = microtime(true); 
for ($i = 0; $i < $iters; ++$i) { 
    $obj = json_decode($json); 
} 
$end_json = microtime(true); 

?> 
<pre>XML elapsed: <?=sprintf('%.4f', ($end_xml - $start_xml))?></pre> 
<pre>JSON elapsed: <?=sprintf('%.4f', ($end_json - $start_json))?></pre> 

Resultado:

XML elapsed: 9.9836 
JSON elapsed: 8.3606 
+0

Su punto de referencia no es muy realista. Seguramente, manipularás los datos de alguna manera, ¿no solo cargarlos? Al menos intente iterar a través de algunos valores o algo. El tiempo de carga probablemente ni siquiera sea la mayor parte del procesamiento real que terminará haciendo. –

Respuesta

10

Como el formato "más ligero", esperaría JSON a ser un poco menos estresante en el servidor, pero dudo que será el mayor problema de rendimiento que usted se encuentra lidiando a medida que su sitio crece en popularidad. Utilice el formato con el que se sienta más cómodo.

Alternativamente, si sabe cómo estructurará sus datos, podría tratar de hacer una versión con formato XML y una versión con formato JSON y simplemente ejecutarla contra su configuración unos cientos de miles de veces para ver si hace una diferencia notable.

+0

El formato de JSON es menos detallado. Los bytes guardados solo son una gran ventaja. Pero además de eso, simplexml crea recursos de simplexml que serán más pesados ​​que las estructuras PHP nativas simples que crea json_decode(). Además de eso, simplexml ha tenido una serie de errores de fuga de memoria en los últimos años, por ejemplo: http://bugs.php.net/bug.php?id=38604. Lo único simple sobre simplexml es su API. Más allá de eso, no es terriblemente poderoso, es ineficiente y tiene errores. –

3

Solo hay una forma de determinar cuál será más fácil para su servidor en su aplicación con sus datos.

¡Pruébelo!

Generaría algunos datos que se parecen a lo que usted traducirá y utilice uno de los marcos de prueba de unidades para decodificarlo miles de veces utilizando cada uno de SimpleXML y json_decode, lo suficiente como para obtener resultados significativos. Y luego puedes decirnos qué funcionó.

Lo sentimos, este no es exactamente el tipo de respuesta que estabas buscando, pero en realidad, es la única manera correcta de hacerlo. ¡Buena suerte!