我刚刚安装了 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
时间。速度如此之慢只有一个原因。
还要考虑到JSON.stringify
从谷歌那里得到了很多的爱。它经过高度优化,很难被击败。
我决定对所有流行的 Node.js 模块进行二进制编码 Msgpack 以及 PSON(协议 JSON)编码库与 JSON 的基准测试,结果如下:
msgpack
包含二进制数组时,通常和最快的第二快msgpack-js
- 始终仅次于msgpack
pson
- 始终慢于msgpack-js
msgpack5
- 狗总是慢我已在https://github.com/mattheworiordan/nodejs-encoding-benchmarks上发布了基准测试存储库和详细结果