24

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 ライブラリと直接比較するために単独でベンチマークすることがあります。

4

4 に答える 4

15

最近 (2020 年) の記事を作成し、JavaScript のバイナリ シリアル化ライブラリを比較するベンチマークを作成しました。

次の形式とライブラリが比較されます。

  • プロトコル バッファ: protobuf-jspbfprotonsgoogle-protobuf
  • アブロ:avsc
  • BSON:bson
  • BSER:bser
  • JSバイナリ:js-binary

現在のベンチマーク結果に基づいて、上位のライブラリを次の順序でランク付けします (値が大きいほど優れており、測定値は JSON よりも x 倍速くなります)。

  1. avsc: 10x エンコード、3-10x デコード
  2. js-binary: 2x エンコード、2-8x デコード
  3. protobuf-js: 0.5-1x エンコード、2-6x デコード、
  4. pbf: 1.2x エンコード、1.0x デコード
  5. bser: 0.5x エンコード、0.5x デコード
  6. bson: 0.5x エンコード、0.7x デコード

msgpackNPM の説明によると、組み込みの JSON ライブラリよりも現在遅いため、ベンチマークには含めませんでした。

詳細については、記事全文を参照してください。

于 2020-07-29T14:17:57.407 に答える
4

MessagePackを見てください。JSONに対応しています。ドキュメントから:

高速でコンパクトなシリアル化

MessagePack は、バイナリ ベースの効率的なオブジェクトのシリアル化ライブラリです。JSON のような多くの言語間で構造化オブジェクトを交換できます。ただし、JSON とは異なり、非常に高速で小さいです。

典型的な小さな整数 (フラグやエラー コードなど) は 1 バイトでのみ保存され、典型的な短い文字列は、文字列自体の長さを除いて 1 バイトしか必要としません。[1,2,3] (3 要素配列) は、次のように MessagePack を使用して 4 バイトでシリアル化されます。

于 2011-06-03T08:24:17.363 に答える
0

逆シリアル化の速度にもっと興味がある場合は、JBB (Javascript Binary Bundles)ライブラリをご覧ください。BSON や MsgPack よりも高速です。

ウィキから、ページJBB vs BSON vs MsgPack

...

  • JBB は、Binary-JSON (BSON) よりも約 70% 速く、MsgPack よりもデコード速度が約 30% 速く、1 つのネガティブなテスト ケース (#3) を使用した場合でも同様です。
  • JBB は、Binary-JSON (BSON) よりも約 61% 小さく、MsgPack よりも約 55% 小さいファイル (圧縮バージョンであっても) を作成します。

...

残念ながら、これはストリーミング形式ではないため、データをオフラインで前処理する必要があります。ただし、ストリーミング形式に変換する計画があります (マイルストーンを確認してください)。

于 2016-07-26T10:37:48.280 に答える