Разбирает JSON быстрее, чем синтаксический анализ XML

Я создаю сложную библиотеку JavaScript для работы с картой на стороне моей компании.

Структура сервера на стороне сервера кодирует свои данные в простой формат XML. Там нет причудливых имен или что-то в этом роде.

В идеале я бы хотел проанализировать все данные в браузере как JSON. Однако, если я это сделаю, мне нужно переписать часть кода на стороне сервера, чтобы также выплюнуть JSON. Это боль, потому что у нас есть общедоступные API, которые я не могу легко изменить.

Я действительно беспокоюсь о производительности в браузере разбора JSON в сравнении с XML. Есть ли большая разница, о которой нужно беспокоиться? Или я должен идти исключительно за JSON? Есть ли у кого-нибудь опыт или тесты в разнице производительности между двумя?

Я понимаю, что большинство современных веб-разработчиков, вероятно, предпочтут JSON, и я могу понять, почему. Тем не менее, меня действительно интересует производительность. Если будет доказанная значительная разница, я готов потратить дополнительные усилия на создание серверной части JSON для клиента.

Ответ 1

JSON должен быть быстрее, поскольку он JS Обозначение объекта, что означает, что он может быть распознан изначально JavaScript. В PHP на стороне GET вещей я часто буду делать что-то вроде этого:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>

Подробнее об этом см. здесь:

Почему каждый выбирает JSON Over XML для jQuery?

Также... какое "дополнительное усилие" вам действительно нужно положить в "генерацию" JSON? Неужели вы не можете сказать, что будете вручную создавать строку JSON? Почти каждый современный серверный язык имеет библиотеки, которые преобразуют собственные переменные в строки JSON. Например, функция PHP core json_encode преобразует ассоциативный массив следующим образом:

$data = array('test'=>'val', 'foo'=>'bar');

в

{"test": "val", "foo": "bar"}

Это просто объект JavaScript (поскольку в JS нет ассоциативных массивов (строго говоря).

Ответ 2

Во-первых, я хотел бы поблагодарить всех, кто ответил на мой вопрос. Я ДЕЙСТВИТЕЛЬНО оцениваю все ваши ответы.

В связи с этим вопросом я провел некоторые дополнительные исследования, выполнив некоторые тесты. Разбор происходит в браузере. IE 8 - единственный браузер, у которого нет собственного парсера JSON. XML - это те же данные, что и версия JSON.

Chrome (версия 8.0.552.224), JSON: 92ms, XML: 90ms

Firefox (версия 3.6.13), JSON: 65ms, XML: 129ms

IE (версия 8.0.6001.18702), JSON: 172 мс, XML: 125 мс

Интересно, что Chrome, похоже, имеет почти такую ​​же скорость. Обратите внимание, что это синтаксический анализ большого количества данных. С небольшими фрагментами данных это, вероятно, не такая уж большая проблема.

Ответ 3

Были сделаны контрольные показатели. Здесь один. Разница в некоторых из более ранних браузеров выглядела целым порядком (порядка 10 с миллисекунд вместо 100 мс), но не массивная. Частью этого является время ответа сервера - XML ​​является более объемным в качестве формата данных. Частью этого является время синтаксического анализа - JSON позволяет отправлять объекты JavaScript, в то время как XML требует разбора документа.

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

См. также вопрос SO Когда вы предпочитаете JSON над XML?

Ответ 4

Производительность на самом деле не рассматривается, предполагая, что вы не говорите о гигабайтах XML. Да, это займет больше времени (XML более подробный), но это не будет то, что пользователь заметит.

Реальная проблема, на мой взгляд, заключается в поддержке XML в JavaScript. E4X хорош, но Microsoft не поддерживается. Таким образом, вам нужно будет использовать стороннюю библиотеку (например, JQuery) для анализа XML.

Ответ 5

поскольку JSON является родным и предназначен для Javascript, он собирается выходить за синтаксический анализ XML в течение всего дня. вы не упомянули свой серверный язык, в PHP есть функция json_encode/json_decode, встроенная в ядро ​​PHP...

Ответ 6

Если возможно, имеет смысл просто измерить его. По "если возможно" я имею в виду, что инструментарий для javascript (особенно для анализа производительности) может быть не таким же хорошим, как для автономных языков программирования.

Зачем измерять? Потому что спекуляция, основанная исключительно на свойствах форматов данных, не очень полезна для анализа производительности - интуиция разработчиков, как известно, плохо прогнозирует производительность. В этом случае это просто означает, что все это доходит до зрелости соответствующих синтаксических анализаторов XML и JSON (и генераторов). XML имеет преимущество в том, что он был дольше; JSON немного проще обрабатывать. Это основано на наличии фактически написанных библиотек для обработки обоих. В конце концов, если все вещи равны (зрелость и оптимизация производительности библиотек), JSON действительно может быть быстрее обработан. Но оба могут быть очень быстрыми; или очень медленно с плохими реализациями.

Тем не менее: я подозреваю, что вы не должны так беспокоиться о производительности, как многие уже предложили. И xml, и json могут быть проанализированы эффективно, и с современными браузерами, вероятно, есть. Скорее всего, если у вас проблемы с производительностью, это не чтение или запись данных, а нечто другое; и первый шаг будет на самом деле выяснить, какова фактическая проблема.

Ответ 7

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

но, чтобы ответить на ваш вопрос: JSON будет быстрее разбираться (потому что это простая нотация объектов javascript).

Ответ 8

В этой ситуации я бы сказал, придерживаюсь XML. Все основные браузеры имеют интерфейс разбора DOM, который будет анализировать хорошо сформированный XML. Эта ссылка показывает способ использования интерфейса DOMParser в Webkit/Opera/Firefox, а также объект ActiveX DOM в IE: https://sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring

Ответ 9

Анализ или построение json сравнительно просто, чем xml, а также большинство языков предоставляют методы для упрощения кодирования и декодирования json, который является несколько сложным с xml.

Ответ 10

Это также зависит от того, как структурирован ваш JSON. Деревоподобные структуры имеют тенденцию анализировать более эффективно, чем список объектов. Именно здесь будет полезно одно фундаментальное понимание структур данных. Я не удивлюсь, если вы проанализируете структуру списка в JSON, которая может выглядеть так:

{
        {
            "name": "New York",
            "country":"USA",
            "lon": -73.948753,
            "lat": 40.712784
        },
        {
            "name": "Chicago",
            "country":"USA",
            "lon": -23.948753,
            "lat": 20.712784
        },
        {
            "name": "London",
            "country":"UK",
            "lon": -13.948753,
            "lat": 10.712784
        }
}

а затем сравните его с деревом, подобным структуре в XML, который может выглядеть следующим образом:

<cities>
  <country name="USA">
     <city name="New York">
        <long>-73.948753</long>
        <lat>40.712784</lat>
     </city>
     <city name="Chicago">
        <long>-23.948753</long>
        <lat>20.712784</lat>
     </city>
  </country>
 <country name="UK">
     <city name="London">
        <long>-13.948753</long>
        <lat>10.712784</lat>
     </city>
  </country>
</cities>

Структура XML может дать более быстрое время, чем у JSON, поскольку, если я прохожу через node из Великобритании, чтобы найти Лондон, мне не нужно перебирать остальные страны, чтобы найти мой город. В примере JSON я просто могу, если Лондон окажется ближе к нижней части списка. Но то, что мы имеем здесь, - это различие в структуре. Я был бы удивлен, обнаружив, что XML быстрее в любом случае или в случае, когда структуры точно такие же.

Здесь - эксперимент, который я использовал с использованием Python - я знаю, что вопрос смотрит на это строго с точки зрения JavaScript, но вы можете найти его полезно. Результаты показывают, что JSON быстрее, чем XML. Тем не менее, дело в том, как структура будет влиять на то, насколько эффективно вы сможете ее получить.

Ответ 11

Лучший пример, который я нашел об этих двух:

http://www.utilities-online.info/xmltojson/#.VVGOlfCYK7M

это означает, что JSON более читабельна и понятна для пользователя, чем XML.