MessagePack比本机node.js JSON慢

我刚安装了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的热爱.它经过高度优化,很难被击败.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...