我刚安装了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%的字符串化时间.只有一个原因就是速度慢得多.
还要考虑到JSON.stringify已经得到了很多来自Google的热爱.它经过高度优化,很难被击败.