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发布了基准存储库和详细的结&#x679C;

Interesting Posts