Тесты производительности и размера
Введение
Для измерения скорости возьмем несколько самых популярных форматов для сериализации данных: JSON
, MessagePack
, Protobuf
и сравним их с Encodexx
в скорости сериализации для нескольких типовых задач:
- Сериализация объекта с 10 полями
- Сериализация массива объектов чисел
- Сериализация глубокой вложенности объектов (10 уровней вложенности)
Каждая серия сериализаций запускается 40 раз, и измеряется мат. ожидание для времени выполнения и стандартное отклонение.
Характеристики системы
- Процессор: Intel(R) Core(TM) Ultra 7 155H
- Оперативная память: 16 ГБ
- ОС: Windows 11
Генерация данных
Данные были сгенерированы заранее и не учитывались во время измерений.
export const dataTest1 = { name: "Name", info: { createdAt: new Date(), updatedAt: new Date(), createdBy: "admin", }, logs: Array.from({ length: 300000 }, (_, i) => ({ id: i, createdAt: new Date(), updatedAt: new Date(), message: String(Math.random()), })), };
export const dataTest2 = { chart1: Array.from({ length: 5000000 }, (_, i) => ({ id: i, xValue: Math.random() * 1000, yValue: Math.random() * 1000, })),};
export const dataTest3 = { info: { createdAt: new Date(), updatedAt: new Date(), createdBy: Array.from({ length: 30000 }, () => ({ name: "admin", email: { address: { primary: { value: { text: { content: { value: { textArr: Array.from({ length: 10 }, () => String(Math.random())), }, }, }, }, }, }, }, })), },};
Код тестов
Код тестов доступен в репозитории на github
Результаты сериализации
Результаты Теста 1
Было сделано 80 запусков
Формат | E(x) (мс) | σ (мс) | Размер (КБ) |
---|---|---|---|
Encodexx | 222.8942 | 22.1144 | 12011 |
Protobuf | 465.2401 | 55.8252 | 11409 |
MessagePack | 741.6133 | 137.0992 | 22214 |
JSON | 937.8181 | 60.7893 | 36005 |
Результаты Теста 2
Было сделано 40 запусков
Формат | E(x) (мс) | σ (мс) | Размер (КБ) |
---|---|---|---|
Encodexx | 330.0305 | 37.8702 | 97 657 |
Protobuf | 9820.2422 | 179.0492 | 120 006 |
MessagePack | 1974.9417 | 447.7696 | 200 066 |
JSON | 2793.5002 | 56.6046 | 337 412 |
Результаты Теста 3
Было сделано 40 запусков
Формат | E(x) (мс) | σ (мс) | Размер (КБ) |
---|---|---|---|
Encodexx | 152.7940 | 32.2443 | 6905 |
Protobuf | 297.3649 | 42.3469 | 6846 |
MessagePack | 84.3228 | 27.2956 | 7843 |
JSON | 45.5487 | 10.1584 | 9278 |
Результаты десериализации
Результаты Теста 1
Было сделано 80 запусков
Формат | E(x) (мс) | σ (мс) |
---|---|---|
Encodexx | 359.2488 | 47.0988 |
Protobuf | 241.4967 | 29.3344 |
MessagePack | 635.8366 | 135.4168 |
JSON | 357.9023 | 38.7211 |
Результаты Теста 2
Было сделано 40 запусков
Формат | E(x) (мс) | σ (мс) |
---|---|---|
Encodexx | 1167.3007 | 180.1760 |
Protobuf | 1420.4842 | 341.2971 |
MessagePack | 2174.5072 | 556.5641 |
JSON | 4289.6828 | 241.2971 |
Результаты Теста 3
Было сделано 40 запусков
Формат | E(x) (мс) | σ (мс) |
---|---|---|
Encodexx | 82.7940 | 17.4066 |
Protobuf | 63.6465 | 19.1032 |
MessagePack | 156.7593 | 56.4024 |
JSON | 71.1563 | 37.5730 |
Выводы
Как можно видеть, Encodexx
показывает хорошие результаты по скорости и размеру сериализации и десериализации данных при этом дает отличную поддержку typescript
и пользовательских типов данных.