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