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
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
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から多くの愛を得ていることも考慮に入れてください。それは高度に最適化されており、打ち負かすのは難しいでしょう。
私は、JSONと比較してPSON(プロトコルJSON)エンコーディングライブラリとともに、バイナリエンコーディングMsgpackのすべての一般的なNode.jsモジュールをベンチマークすることにしました。結果は次のとおりです。
msgpack
通常は2番目に速く、バイナリ配列を含めると最も速くなりますmsgpack-js
-一貫して2番目msgpack
pson
-一貫してより遅いmsgpack-js
msgpack5
-犬はいつも遅いベンチマークリポジトリと詳細な結果をhttps://github.com/mattheworiordan/nodejs-encoding-benchmarksで公開しました