7 Stimmen

Was einen PHP-Server weniger belastet: SimpleXML oder json_decode?

Ich beginne mit der Entwicklung einer Webanwendung in PHP, die hoffentlich unglaublich populär werden und mich berühmt und reich machen wird :-)

Wenn es soweit ist, könnte meine Entscheidung, ob ich die Daten der API mit SimpleXML als XML parse oder json_decode verwende, einen Unterschied in der Skalierbarkeit der Anwendung machen.

Weiß jemand, welcher dieser Ansätze für den Server effizienter ist?

Aktualisierung: Ich habe einen rudimentären Test durchgeführt, um zu sehen, welche Methode leistungsfähiger ist. Es scheint, dass json_decode ist etwas schneller in der Ausführung als simplexml_load_string . Das ist nicht sehr aussagekräftig, weil es Dinge wie die Skalierbarkeit von gleichzeitigen Prozessen nicht testet. Meine Schlussfolgerung ist, dass ich vorerst SimpleXML wegen seiner Unterstützung für XPath-Ausdrücke verwenden werde.

<?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>

Ergebnis:

XML elapsed: 9.9836
JSON elapsed: 8.3606

10voto

Randy Punkte 3912

Als das "leichtere" Format würde ich erwarten, dass JSON den Server etwas weniger belastet, aber ich bezweifle, dass es das größte Leistungsproblem sein wird, mit dem Sie zu kämpfen haben, wenn Ihre Website an Popularität gewinnt. Verwenden Sie das Format, mit dem Sie am besten zurechtkommen.

Wenn Sie wissen, wie Sie Ihre Daten strukturieren werden, können Sie alternativ eine XML- und eine JSON-formatierte Version erstellen und diese ein paar hunderttausend Mal mit Ihrem Setup abgleichen, um zu sehen, ob es einen spürbaren Unterschied gibt.

3voto

Keith Twombley Punkte 1626

Es gibt nur einen Weg, um festzustellen, was auf Ihrem Server in Ihrer Anwendung mit Ihren Daten einfacher sein wird.

Testen Sie es!

Ich würde einige Daten generieren, die dem ähneln, was Sie übersetzen werden, und eines der Unit-Testing-Frameworks verwenden, um sie ein paar tausend Mal mit SimpleXML und json_decode zu dekodieren - genug, um aussagekräftige Ergebnisse zu erhalten. Und dann können Sie uns sagen, was funktioniert hat.

Es tut mir leid, dass dies nicht genau die Art von Antwort ist, nach der Sie gesucht haben, aber in Wirklichkeit ist es der einzig richtige Weg, es zu tun. Viel Glück!

3voto

James Hall Punkte 7207

Das ist nicht wirklich eine Antwort auf die Frage, aber Sie könnten einfach warten, bis viele Benutzer auf Ihr System zugreifen. Sie werden vielleicht überrascht sein, wo Ihre Engpässe tatsächlich liegen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X