1 から 100 の混合型プロパティを持つ適度に複雑なオブジェクトをシリアル化する必要があります。
最初は JSON を使用していましたが、わずかに高速な BSON に切り替えました。
10000 個のサンプル オブジェクトのエンコード
JSON: 1807mS
BSON: 1687mS
MessagePack: 2644mS (JS, modified for BinaryF)
桁違いの増加が必要です。システムの残りの部分に途方もなく悪い影響を与えています。
BSON に移行する動機の一部は、バイナリ データをエンコードする必要があるため、JSON は (現在) 不適切です。また、オブジェクトに存在するバイナリデータを単純にスキップするため、これらのベンチマークで「不正行為」を行っています。
プロファイリングされた BSON パフォーマンスのホットスポット
- (やむを得ない?) UTF16 V8 JS 文字列の UTF8 への変換。
- BSON ライブラリ内の malloc および string ops
BSON エンコーダーは、Mongo BSON ライブラリーに基づいています。
ネイティブの V8 バイナリ シリアライザーは素晴らしいかもしれませんが、JSON はネイティブでシリアル化が速いため、それでも答えが得られないのではないかと心配しています。おそらく、私の最善の策は、BSON ライブラリを最適化するか、独自のライブラリを作成して、V8 から文字列を引き出すはるかに効率的な方法を見つけることです。戦術の 1 つは、BSON に UTF16 サポートを追加することです。
だから私はアイデアと、おそらく健全性チェックのためにここにいます。
編集
MessagePack ベンチマークを追加しました。これは BinaryF を使用するように元の JS から変更されました。
C++ MessagePack ライブラリはさらなる改善を提供する可能性があります。BSON ライブラリと直接比較するために単独でベンチマークすることがあります。