6

node-msgpackをインストールし、ネイティブJSONに対してテストしました。MessagePackははるかに低速です。誰もが理由を知っていますか?

著者自身のベンチマークを使用して...

node ~/node_modules/msgpack/bench.js 
msgpack pack:   4165 ms
msgpack unpack: 1589 ms
json    pack:   1352 ms
json    unpack: 761 ms
4

2 に答える 2

11

https://github.com/pgriess/node-msgpackについて話していると仮定します。

ソースを見ているだけで、どうなるかわかりません。たとえばsrc/msgpack.cc、次のようになります。

Buffer *bp = Buffer::New(sb._sbuf.size);
memcpy(Buffer::Data(bp), sb._sbuf.data, sb._sbuf.size);

ノードの用語では、SlowBufferリクエストごとに新しいものを割り当てて入力します。次のようにして、割り当て部分のベンチマークを行うことができます。

var msgpack = require('msgpack');
var SB = require('buffer').SlowBuffer;
var tmpl = {'abcdef' : 1, 'qqq' : 13, '19' : [1, 2, 3, 4]};

console.time('SlowBuffer');
for (var i = 0; i < 1e6; i++)
    // 20 is the resulting size of their "DATA_TEMPLATE"
    new SB(20);
console.timeEnd('SlowBuffer');

console.time('msgpack.pack');
for (var i = 0; i < 1e6; i++)
    msgpack.pack(tmpl);
console.timeEnd('msgpack.pack');

console.time('stringify');
for (var i = 0; i < 1e6; i++)
    JSON.stringify(tmpl);
console.timeEnd('stringify');

// result - SlowBuffer: 915ms
// result - msgpack.pack: 5144ms
// result - stringify: 1524ms

したがって、メッセージにメモリを割り当てるだけで、すでに60%のstringify時間を費やしています。非常に遅い理由は1つだけです。

JSON.stringifyまた、Googleから多くの愛を得ていることも考慮に入れてください。それは高度に最適化されており、打ち負かすのは難しいでしょう。

于 2013-01-09T09:42:43.067 に答える
3

私は、JSONと比較してPSON(プロトコルJSON)エンコーディングライブラリとともに、バイナリエンコーディングMsgpackのすべての一般的なNode.jsモジュールをベンチマークすることにしました。結果は次のとおりです。

  • バイナリ配列が含まれていない限り、JSONのエンコードが最速
  • msgpack通常は2番目に速く、バイナリ配列を含めると最も速くなります
  • msgpack-js-一貫して2番目msgpack
  • pson-一貫してより遅いmsgpack-js
  • msgpack5-犬はいつも遅い

ベンチマークリポジトリと詳細な結果をhttps://github.com/mattheworiordan/nodejs-encoding-benchmarksで公開しました

于 2015-11-09T16:25:51.717 に答える