MessagePack比本机node.js JSON慢
我刚刚安装了node-msgpack,并对本机JSON进行了testing。 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%的时间。 只有一个原因,它是如此之慢。
还要考虑到JSON.stringify
已经得到了Google的很多爱。 这是高度优化,将难以击败。
我决定对所有stream行的Node.js模块进行二进制编码Msgpack以及PSON(协议JSON)编码库与JSON进行基准testing,结果如下:
- JSON编码速度最快,除非它包含一个二进制数组
- 包含二进制数组时,
msgpack
通常速度最快,速度最快 -
msgpack-js
– 始终msgpack
-
pson
– 始终比msgpack-js
慢 -
msgpack5
– 狗总是慢
我已经在https://github.com/mattheworiordan/nodejs-encoding-benchmarks发布了基准存储库和详细的结果