Мне нужно сериализовать умеренно сложные объекты с 1-100 свойствами смешанного типа.
Изначально использовался JSON, затем я переключился на BSON, что немного быстрее.
Кодирование10000 образцов объектов
JSON: 1807mS
BSON: 1687mS
MessagePack: 2644mS (JS, modified for BinaryF)
Я хочу увеличить на порядок;это оказывает смехотворно плохое влияние на остальную часть системы.
Частью мотивации для перехода на BSON является требование кодировать двоичные данные, поэтому JSON (сейчас) не подходит.И поскольку он просто пропускает двоичные данные, присутствующие в объектах, он «обманывает» в этих тестах.
Профильные точки производительности BSON
- (неизбежно?) преобразование строк UTF16 V8 JS в UTF8.
- malloc и строковые операции внутри библиотеки BSON
Кодер BSON основан на библиотеке Mongo BSON.
Нативный двоичный сериализатор V8 мог бы быть замечательным, но поскольку JSON является нативным и быстрым для сериализации, я боюсь, что даже это может не дать ответа.Возможно, мой лучший выбор - оптимизировать черт из библиотеки BSON или написать свой собственный плюс, чтобы найти более эффективный способ вытащить строки из V8.Одной из тактик может быть добавление поддержки UTF16 в BSON.
Так что я здесь для идей и, возможно, проверки работоспособности.
Редактировать
Добавлен бенчмарк MessagePack.Это было изменено по сравнению с оригинальным JS для использования BinaryF.
Библиотека C ++ MessagePack может предложить дополнительные улучшения, я могу сравнить ее отдельно, чтобы сравнить непосредственно с библиотекой BSON.