Скорость анализа JSON и XML в Delphi - PullRequest
12 голосов
/ 14 марта 2011

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

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

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

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

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

1 Ответ

11 голосов
/ 14 марта 2011

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

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

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

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

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

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

Дополнительное примечание:

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

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

...