Что снижает нагрузку на сервер PHP: SimpleXML или json_decode?

Я начинаю разрабатывать веб-приложение на 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

Ваш тест не очень реалистичен. Конечно, вы будете каким-то образом манипулировать данными, а не просто загружать их? По крайней мере, попробуйте перебрать несколько значений или что-то в этом роде. Время загрузки, вероятно, даже не основная часть фактической обработки, которую вы в конечном итоге будете выполнять.

Frank Farmer 03.01.2010 12:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
1
3 493
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

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

Frank Farmer 03.01.2010 12:46

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

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

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

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

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

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

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