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

JSON против скорости разбора XML в Delphi

Мы создаем приложение, которое использует много разбора XML, и я подумал, что, возможно, использовать JSON, потому что мы можем использовать JSON в качестве альтернативы XML.

Мне нужно проверить, что быстрее JSON или XML, но подумал, чтобы сначала спросить мнение.

JSON в JavaScript является родным и быстрым. Конечно, быстрее, чем синтаксический анализ XML. Но в Delphi нет собственных классов для этого.

Итак, мой вопрос - что происходит быстрее в Delphi, используя библиотеку XML или JSON-парсера? Или они равны по скорости?

И если это быстрее, чем вы предпочитаете - Delphi Web Utils, Библиотека JSON Delphi или JSON Toolkit

4b9b3361

Ответ 1

С хорошо написанным парсером XML и JSON будут иметь более или менее одинаковые сроки. У вас может быть медленный парсер JSON и быстрый синтаксический анализатор XML.

Возможно, немного медленнее для XML, потому что синтаксис более сложный, чем JSON.

Но узкое место будет в основном читать с жесткого диска, а не анализировать содержимое.

Мы использовали JSON для клиента/сервера нашего ORM по нескольким причинам (но вы найдете других, я не хочу троллить здесь, просто поговорите о нашем маленьком эксперименте):

  • Как и XML, это текстовый, удобочитаемый для людей формат для представления простых структур данных и ассоциативных массивов (называемых объектами);
  • Легче читать (для людей и машин), быстрее реализовать и, как правило, меньше по размеру, чем XML;
  • Это очень эффективный формат кэширования данных;
  • Его компоновка позволяет переписываться на отдельные строки UTF-8 с нулевым завершением, практически без потерь впустую: эта функция используется для быстрого разбиения JSON на текстовое преобразование результатов таблиц без выделения памяти и копирования данных;
  • Он поддерживается на языке JavaScript, что делает его идеальным форматом сериализации в любом приложении AJAX (например, Web 2.0);
  • Формат JSON указан в хорошо известном и простом RFC;
  • Текстовая кодировка по умолчанию для JSON и нашего ORM - это UTF-8, которая позволяет хранить и передавать полную кодировку Юникода;
  • Это формат данных по умолчанию, используемый службами ASP.NET AJAX, созданных в Windows Communication Foundation (WCF) с .NET framework 3.5; поэтому Microsoft официально "готов";
  • Для двоичной blob-передачи нет CDATA, как в XML. Поэтому мы просто кодируем двоичные данные как шестнадцатеричные или Base64 (использует меньше места) внутри строки JSON.

О скорости анализа, вы можете взглянуть на наш синтаксический анализатор на месте и автор JSON из результатов SQLite3. Это было очень оптимизировано для скорости, и это быстро. Мы написали простую, но эффективную сериализацию JSON для любого TPersistent, включая коллекции. Мы просто добавляем динамический массив JSON serializer, который также очень быстр.

Примечание:

Все эти синтаксические анализаторы отличаются от тех, которые вы упомянули, поскольку они анализируют содержимое JSON и форматируют его как текст внутри входного буфера: при разборе не выделяется память, поэтому он должен быть быстрее других решений. Текстовое содержимое не отображается, поля заканчиваются # 0 и вычисляется указатель на начало текста. Таким образом, чтобы получить доступ к значению, вы просто используете указатель для получения данных. Он обычно анализирует некоторый MB содержимого JSON без времени.

Также посмотрите на парсер JSON, встроенный в DWS. Автор утверждал, что это было быстро. Но все же выделено блок памяти для каждого объекта.