Skip to main content

Тесты производительности и размера

Введение

Для измерения скорости возьмем несколько самых популярных форматов для сериализации данных: JSON, MessagePack, Protobuf и сравним их с Encodexx в скорости сериализации для нескольких типовых задач:

  • Сериализация объекта с 10 полями
  • Сериализация массива объектов чисел
  • Сериализация глубокой вложенности объектов (10 уровней вложенности)

Каждая серия сериализаций запускается 40 раз, и измеряется мат. ожидание для времени выполнения и стандартное отклонение.

Характеристики системы

  • Процессор: Intel(R) Core(TM) Ultra 7 155H
  • Оперативная память: 16 ГБ
  • ОС: Windows 11

Генерация данных

Данные были сгенерированы заранее и не учитывались во время измерений.

Код тестов

Код тестов доступен в репозитории на github

Результаты сериализации

Результаты Теста 1

Было сделано 80 запусков

ФорматE(x) (мс)σ (мс)Размер (КБ)
Encodexx222.894222.114412011
Protobuf465.240155.825211409
MessagePack741.6133137.099222214
JSON937.818160.789336005

Результаты Теста 2

Было сделано 40 запусков

ФорматE(x) (мс)σ (мс)Размер (КБ)
Encodexx330.030537.870297 657
Protobuf9820.2422179.0492120 006
MessagePack1974.9417447.7696200 066
JSON2793.500256.6046337 412

Результаты Теста 3

Было сделано 40 запусков

ФорматE(x) (мс)σ (мс)Размер (КБ)
Encodexx152.794032.24436905
Protobuf297.364942.34696846
MessagePack84.322827.29567843
JSON45.548710.15849278

Результаты десериализации

Результаты Теста 1

Было сделано 80 запусков

ФорматE(x) (мс)σ (мс)
Encodexx359.248847.0988
Protobuf241.496729.3344
MessagePack635.8366135.4168
JSON357.902338.7211

Результаты Теста 2

Было сделано 40 запусков

ФорматE(x) (мс)σ (мс)
Encodexx1167.3007180.1760
Protobuf1420.4842341.2971
MessagePack2174.5072556.5641
JSON4289.6828241.2971

Результаты Теста 3

Было сделано 40 запусков

ФорматE(x) (мс)σ (мс)
Encodexx82.794017.4066
Protobuf63.646519.1032
MessagePack156.759356.4024
JSON71.156337.5730

Выводы

Как можно видеть, Encodexx показывает хорошие результаты по скорости и размеру сериализации и десериализации данных при этом дает отличную поддержку typescript и пользовательских типов данных.