PHP: JSON или XML-парсер быстрее? - PullRequest
16 голосов
/ 14 июня 2009

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

Спасибо!

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

Ответы [ 6 ]

17 голосов
/ 14 июня 2009

Комментарий Адама, приведенный выше, убедил меня в этом. Используя 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

в следующем коде (где я уже свернул данные в файл, data. [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>";
}
12 голосов
/ 14 июня 2009

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

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

5 голосов
/ 27 июля 2009

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

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

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

1 голос
/ 27 июля 2009

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

1 голос
/ 14 июня 2009

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

0 голосов
/ 14 июня 2009

JSON имеет тенденцию быть намного меньше по размеру

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

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

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