MessagePack比本机node.js JSON慢

时间:2013-01-08 21:34:48

标签: node.js msgpack messagepack

我刚刚安装了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

2 个答案:

答案 0 :(得分:10)

我假设你在谈论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

因此,通过为消息分配内存,他们已经花费了stringify时间的60%。只有一个原因就是速度慢得多。

还要考虑到JSON.stringify已经得到了Google的大量关注。它经过了高度优化,很难被击败。

答案 1 :(得分:2)

我决定将所有流行的Node.js模块用于二进制编码Msgpack以及PSON(协议JSON)编码库与JSON的比较,结果如下:

  • JSON编码最快,除非它包含二进制数组
  • msgpack包含二进制数组时正常和最快的第二快
  • msgpack-js - 始终位于msgpack
  • 之后
  • pson - 始终慢于msgpack-js
  • msgpack5 - 狗慢慢

我已在https://github.com/mattheworiordan/nodejs-encoding-benchmarks

发布了基准测试存储库和详细结果