Вопрос

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

Если это время придет, мое решение, анализировать ли данные 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
Это было полезно?

Решение

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

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

Другие советы

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

Попробуй это!

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top