2009-06-14 26 views
14

Sto costruendo classi che si interfacciano con l'API di Twitter e mi chiedo se il parser XML o JSON incorporato di PHP sia più veloce? Twitter mi invierà gli stessi dati in entrambi i formati, quindi le prestazioni del PHP determineranno la mia scelta. Sto usando php_apc, quindi puoi ignorare il tempo di analisi e supporre che stia eseguendo il bytecode.PHP: il parser JSON o XML è più veloce?

Grazie!

more: Sto solo cercando di ottenere array associativi dai dati. Non sto facendo tree walking, l'iterazione dei nodi o qualcosa di troppo complesso. Il formato sarà sempre lo stesso. (Spero!)

+7

Perché non analizzarlo autonomamente sui set di dati reali che utilizzerai? Le prestazioni del parser possono essere abbastanza dipendenti da ciò che si alimenta. –

+1

Quale dei PHP xml-apis hai intenzione di utilizzare? Direi che SimpleXML e DOM sono più lenti o alla pari con JSON, mentre XMLReader o SAX sono più veloci. –

risposta

10

non ha fatto alcun riferimento, ma ...

Dal JSON è solo una descrizione delle sequenze di stringa nidificate, senza la necessità di offrire un'interfaccia DOM, attributi parsing e altre cose sottili , la mia ipotesi è che un parser JSON sia PIÙ veloce di un parser XML.

+1

Sono d'accordo.JSON ha una struttura molto più semplice e meno dinamica. – Blixt

+4

L'analisi del formato JSON è molto più complicata di un XML ben definito. La stringa di analisi è un lavoro molto complicato, forse perché si utilizza la funzione di libreria standard che non si sente, ma è molto più semplice analizzare l'XML strutturato rispetto ai dati strutturati in JSON. –

+0

Se si considera solo l'analisi pura, JSON dovrebbe essere molto più veloce. Ma dipende anche dall'uso dei dati analizzati. –

1

La risposta dipende da come si prevede di utilizzarlo. Voglio dire se creerai qualche richiesta e le elaborerai all'interno dello script PHP, credo che XML sarà molto più veloce. Ma una volta che hai preso in considerazione la creazione e le chiamate AJAX e il successivo processo dei risultati, dovresti considerare l'utilizzo di JSON, dal momento che trarrai vantaggio dalla rappresentazione automatica JavaScript del risultato JSON come oggetti e supporterà la richiesta cross domain con le funzioni callback, mentre per XML sarai proxy .

0

JSON tende ad essere molto più piccolo di dimensioni

Inoltre si esegue json_decode una volta e poi accedere ai dati come array alcuna utilità per altre funzioni.

Senza correre benchmark id andare con JSON è più veloce

17

Il commento da Adamo sopra mi ha convinto a benchmark. Usando https://twitter.com/status/mentions.[format], ho trovato che simplexml_load_string() è LEGGERMENTE più veloce di json_decode(). Ma la differenza è praticamente un margine di errore.

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 

contro

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 

sul seguente codice (dove ho già curl'ed i dati in un file, i dati. [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

Questo test tuttavia non, dopo il caricamento, legge i dati dall'oggetto XML. Mentre json_decode restituisce un array semplice, SimpleXML fornisce a un oggetto metodi speciali per leggere i dati, inclusa la magia dinamica. Ciò potrebbe influire sulle prestazioni. –

4

tendo a scoprire che simplexml_load_string() è più veloce di json_decode() quando il ritorno JSON è un oggetto.

Tuttavia, avere il json restituito come array utilizzando json_decode ($ string, true) è in realtà molto più rapido rispetto all'utilizzo di un oggetto (come nella maggior parte degli aspetti di PHP quando si confrontano gli array con gli oggetti).

Ive ha visto json_decode() avere una velocità doppia rispetto a simplexml_load_string() in queste circostanze.

1

Avete considerato in che modo il risparmio di larghezza di banda complessivo potrebbe influire sulle prestazioni del vostro script? Se le tue richieste verranno ripetute, una notevole quantità di tempo utilizzando JSON dovrebbe essere la scelta economica giusta.