Что снижает нагрузку на сервер PHP: SimpleXML или json_decode? - PullRequest
7 голосов
/ 18 октября 2008

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

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

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

Обновление: Я провел элементарный тест, чтобы увидеть, какой метод более эффективен. Похоже, что json_decode выполняется немного быстрее, чем simplexml_load_string. Это не очень убедительно, потому что не проверяет такие вещи, как масштабируемость параллельных процессов. Я пришел к выводу, что пока что пойду с SimpleXML из-за его поддержки выражений XPath.

<code><?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))?>
JSON elapsed: <?=sprintf('%.4f', ($end_json - $start_json))?>

Результат:

XML elapsed: 9.9836
JSON elapsed: 8.3606

Ответы [ 3 ]

10 голосов
/ 18 октября 2008

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

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

3 голосов
/ 19 октября 2008

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

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

3 голосов
/ 18 октября 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...