Domanda

Sto iniziando a sviluppare un'applicazione web in PHP che spero diventerà incredibilmente popolare e mi renderà famoso e ricco. : -)

Se arriva quel momento, la mia decisione se analizzare i dati dell'API come XML con SimpleXML o utilizzare json_decode potrebbe fare la differenza nella scalabilità dell'app.

Qualcuno sa quale di questi approcci è più efficiente per il server?

Aggiornamento: ho eseguito un test rudimentale per vedere quale metodo era più performante. Sembra che json_decode sia in esecuzione leggermente più veloce di simplexml_load_string . Questo non è terribilmente conclusivo perché non mette alla prova cose come la scalabilità dei processi concorrenti. La mia conclusione è che per il momento andrò con SimpleXML a causa del suo supporto per le espressioni 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>

Risultato:

XML elapsed: 9.9836
JSON elapsed: 8.3606
È stato utile?

Soluzione

Come il "più leggero" formato, mi aspetto che JSON sia leggermente meno stressante sul server, ma dubito che sarà il più grande problema di prestazioni con cui ti trovi ad affrontare man mano che il tuo sito cresce in popolarità. Usa il formato che preferisci.

In alternativa, se sai come strutturerai i tuoi dati, potresti provare a creare una versione in formato XML e una versione in formato JSON ed eseguirlo sul tuo setup alcune centinaia di migliaia di volte per vedere se fa un differenza notevole.

Altri suggerimenti

C'è solo un modo per determinare quale sarà più facile sul tuo server nella tua applicazione con i tuoi dati.

Provalo!

Genererei alcuni dati che assomigliano a ciò che tradurrete e utilizzerei uno dei framework di unit test per decodificarlo alcune migliaia di volte usando ciascuno dei SimpleXML e json_decode, abbastanza per ottenere risultati significativi. E poi puoi dirci cosa ha funzionato.

Mi dispiace che questo non sia esattamente il tipo di risposta che stavi cercando, ma in realtà è l'unico modo giusto per farlo. Buona fortuna!

Non proprio una risposta alla domanda, ma potresti semplicemente aspettare fino a quando molti utenti non colpiscono il tuo sistema. Potresti essere sorpreso da dove si trovano effettivamente i tuoi colli di bottiglia:

http://gettingreal.37signals.com/ch04_Scale_Later.php

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top