2008-10-17 20 views
7

Je commence à développer une application web en PHP qui, je l'espère, deviendra incroyablement populaire et me rendra célèbre et riche. :-)Qu'est-ce qui met moins de charge sur un serveur PHP: SimpleXML ou json_decode?

Si ce moment arrive, ma décision d'analyser les données API en XML avec SimpleXML ou d'utiliser json_decode pourrait faire la différence dans l'évolutivité de l'application.

Est-ce que quelqu'un sait laquelle de ces approches est la plus efficace pour le serveur?

Mise à jour: J'ai effectué un test rudimentaire pour voir quelle méthode était la plus performante. Il semble que json_decode est légèrement plus rapide que simplexml_load_string. Ce n'est pas très concluant car il ne teste pas des choses comme l'évolutivité des processus concurrents. Ma conclusion est que je vais aller avec SimpleXML pour le moment en raison de sa prise en charge des expressions 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> 

Résultat:

XML elapsed: 9.9836 
JSON elapsed: 8.3606 
+0

Votre référence n'est pas très réaliste. Sûrement, vous allez manipuler les données d'une manière ou d'une autre, pas seulement le charger? Au moins, essayez d'itérer à travers quelques valeurs ou quelque chose. Le temps de chargement n'est probablement pas la majeure partie du traitement que vous finirez par faire. –

Répondre

10

Comme le format « plus léger », je pense JSON être un peu moins stressant sur le serveur, mais je doute que ce sera le plus gros problème de performance que vous vous trouvez traiter avec votre site devient de plus en plus populaire. Utilisez n'importe quel format avec lequel vous êtes plus à l'aise. Sinon, si vous savez comment structurer vos données, vous pouvez essayer de créer une version au format XML et une version au format JSON et l'exécuter quelques centaines de milliers de fois dans votre configuration pour voir si elle fonctionne. une différence notable.

+0

Le format de JSON est moins détaillé. Les octets sauvés seuls sont un avantage majeur. Mais en plus de cela, simplexml crée des ressources simplexml qui seront plus lourdes que les simples structures PHP natives créées par json_decode(). En plus de cela, simplexml a eu un certain nombre de bugs de fuite de mémoire au cours des années, par exemple: http://bugs.php.net/bug.php?id=38604. La seule chose simple à propos de simplexml est son API. Au-delà, ce n'est pas très puissant, inefficace et bogué. –

3

Il n'y a qu'une seule façon de déterminer ce qui sera le plus facile sur votre serveur dans votre application avec vos données.

Testez-le! Je générerais des données qui ressembleraient à ce que vous traduiriez et j'utiliserais l'un des frameworks de tests unitaires pour le décoder quelques milliers de fois en utilisant SimpleXML et json_decode, assez pour obtenir des résultats significatifs. Et puis vous pouvez nous dire ce qui a fonctionné.

Désolé, ce n'est pas exactement le genre de réponse que vous cherchiez, mais en réalité, c'est la seule bonne façon de le faire. Bonne chance!

3

Pas vraiment une réponse à la question, mais vous pourriez juste attendre jusqu'à ce que vous avez beaucoup d'utilisateurs qui frappent votre système. Vous pourriez être surpris où vos goulots d'étranglement se situent en réalité:

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