2008-10-17 1 views
7

Я начинаю разрабатывать веб-приложение на PHP, которое, я надеюсь, станет невероятно популярным и сделает меня знаменитым и богатым. :-)Что снижает нагрузку на сервер PHP: SimpleXML или json_decode?

Если придет время, мое решение о том, следует ли анализировать данные API как XML с помощью SimpleXML или использовать json_decode, может повлиять на масштабируемость приложения.

Кто-нибудь знает, какой из этих подходов более эффективен для сервера?

Обновление: Я провел рудиментарный тест, чтобы узнать, какой метод был более совершенным. Похоже, что json_decode работает чуть быстрее, чем simplexml_load_string. Это не очень убедительно, потому что это не проверяет такие вещи, как масштабируемость параллельных процессов. Мое заключение заключается в том, что я пока буду с SimpleXML из-за поддержки выражений 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> 

Результат:

XML elapsed: 9.9836 
JSON elapsed: 8.3606 
+0

Ваш тест не очень реалистично. Наверняка, вы каким-то образом будете манипулировать данными, а не просто загружать их? По крайней мере, попробуйте выполнить несколько значений или что-то еще. Время загрузки, вероятно, даже не является основной частью фактической обработки, которую вы закончите. – 2010-01-03 09:48:27

ответ

10

В качестве «зажигалки» формат, я бы ожидать, JSON, чтобы быть немного меньше стрессовых ситуаций на сервере, но я сомневаюсь, что это будет самой большой проблемой производительности вы оказываетесь поскольку ваш сайт растет в популярности. Используйте любой формат, с которым вам удобнее.

В качестве альтернативы, если вы знаете, как вы будете структурировать свои данные, вы можете попробовать создать версию в формате XML и версию в формате JSON и просто запустить ее против вашей установки несколько сотен тысяч раз, чтобы убедиться, что она делает заметная разница.

+0

Формат JSON менее подробный. Сохраненные байты являются основным преимуществом. Но кроме того, simplexml создает ресурсы simplexml, которые будут более тяжелыми, чем простые собственные PHP-структуры, созданные json_decode(). Кроме того, на протяжении многих лет у simplexml было множество ошибок утечки памяти, например: http://bugs.php.net/bug.php?id=38604. Единственное, что просто про simplexml, это его API. Помимо этого, это не очень мощно, это неэффективно и плохо. – 2010-01-03 09:46:20

3

Существует только один способ определить, что будет проще на вашем сервере в вашем приложении с вашими данными.

Проверьте это!

Я бы сгенерировал некоторые данные, которые похожи на то, что вы будете переводить, и используйте один из модулей тестирования модулей, чтобы декодировать его несколько тысяч раз, используя каждый из SimpleXML и json_decode, достаточный для получения значимых результатов. И тогда вы можете сказать нам, что сработало.

Извините, это не совсем тот ответ, который вы искали, но на самом деле это единственный правильный способ сделать это. Удачи!

3

Не совсем ответ на вопрос, но вы можете просто подождать, пока у вас не будет много пользователей, поражающих вашу систему. Вы можете быть удивлены, где ваши узкие места на самом деле лежат:

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

Смежные вопросы