Максимально быстрая сериализация объектов Javascript с помощью Google V8

Мне нужно сериализовать объекты средней сложности со свойствами смешанного типа от 1 до 100.

Первоначально использовался JSON, затем я переключился на BSON, который немного быстрее.

Кодирование 10000 образцов объекты

JSON:        1807mS
BSON:        1687mS
MessagePack: 2644mS (JS, modified for BinaryF)

Я хочу увеличения на порядок; он оказывает смехотворно плохое влияние на остальную систему.

Частью мотивации для перехода на BSON является требование кодирования двоичных данных, поэтому JSON (в настоящее время) не подходит. А поскольку он просто пропускает двоичные данные, присутствующие в объектах, это «обман» в этих тестах.

Профилированные горячие точки производительности BSON

  • (неизбежно?) Преобразование строк JS UTF16 V8 в UTF8.
  • malloc и строковые операции внутри библиотеки BSON

Кодер BSON основан на библиотеке Mongo BSON.

Встроенный двоичный сериализатор V8 может быть замечательным, но, поскольку JSON является встроенным и быстро сериализуется, я боюсь, что даже это может не дать ответа. Возможно, лучше всего мне оптимизировать библиотеку BSON или написать свой собственный плюс найти более эффективный способ извлечения строк из V8. Одна из тактик может заключаться в добавлении поддержки UTF16 в BSON.

Итак, я здесь за идеями и, возможно, для проверки работоспособности.

Править

Добавлен тест MessagePack. Это было изменено по сравнению с исходным JS для использования BinaryF.

Библиотека C ++ MessagePack может предлагать дальнейшие улучшения, я могу протестировать ее отдельно для сравнения непосредственно с библиотекой BSON.

15
задан 3 June 2011 в 16:28
поделиться