Подтвердить что ты не робот

PHP: ускоритель JSON или XML?

Я создаю классы, которые взаимодействуют с API Twitter, и мне интересно, быстрее ли встроенный PHP-анализатор XML или JSON? Twitter будет отправлять мне те же данные в любом формате, поэтому производительность PHP определит мой выбор. Я использую php_apc, поэтому вы можете игнорировать время синтаксического анализа и предполагать, что я запускаю байт-код.

Спасибо!

more: Я просто хочу получить ассоциативные массивы из данных. Я не хожу по дереву, итерация node или что-то слишком сложное. Формат всегда будет одинаковым. (Надеюсь!)

4b9b3361

Ответ 1

Я не делал никаких тестов, но...

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

Ответ 2

Комментарий от Адама выше убедил меня сравнить его. Используя https://twitter.com/status/mentions.[format], я обнаружил, что simplexml_load_string() работает медленнее, чем json_decode(). Но разница - это практически погрешность.

Test #1 time (xml): 3.75221395493 seconds
Test #2 time (xml): 4.1562371254 seconds
Test #3 time (xml): 3.60420489311 seconds
Test #4 time (xml): 3.85622000694 seconds
Test #5 time (xml): 3.89622211456 seconds

против

Test #1 time (json): 4.53225803375 seconds
Test #2 time (json): 4.06823205948 seconds
Test #3 time (json): 4.03222990036 seconds
Test #4 time (json): 3.80421590805 seconds
Test #5 time (json): 3.88022208214 seconds

в следующем коде (где я уже скручивал данные в файл, данные. [xml, json]).

<?php

$test = 'json';  //xml or json
$data = implode(file("data.".$test),"\r\n");

for ($t=1; $t<=5; $t++) {
    $start[$t] = microtime(1);
    for ($i=0; $i<3000; $i++) {
        if ($test == 'xml') $xml = simplexml_load_string($data);
        else $json = json_decode($data);
    }
    $end[$t] = microtime(1);
    echo "<p>Test #{$t} time ({$test}): " . ($end[$t] - $start[$t]). " seconds</p>";
}

Ответ 3

Я обычно обнаруживаю, что simplexml_load_string() быстрее json_decode(), когда json return является объектом.

Однако, если json возвращен как массив с использованием json_decode ($ string, true), на самом деле намного быстрее, чем с использованием объекта (как это верно в большинстве случаев PHP при сравнении массивов с объектами).

Я видел, что json_decode() в этих обстоятельствах в два раза быстрее, чем simplexml_load_string().

Ответ 4

Ответ зависит от того, как вы планируете его использовать. Я хочу сказать, что если вы создадите некоторый запрос и обработаете его внутри PHP script, я считаю, что XML будет намного быстрее. Но как только вы планируете создавать вызовы и AJAX, а затем обрабатывать результат, вы должны использовать JSON, так как вы используете автоматическое представление результата JSON в JavaScript как объект, а также поддерживает кросс-доменный запрос с функциями обратного вызова, тогда как для XML вы будете использовать прокси-сервер.

Ответ 5

Рассматривали ли вы, как общая экономия полосы пропускания может повлиять на производительность вашего script? Если ваши запросы будут повторены, значительное время, использующее JSON, должно быть разумным экономическим выбором.

Ответ 6

JSON, как правило, намного меньше по размеру

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

Без запуска тестов id идти с JSON быстрее