NiC*_*man 10 json websocket node.js bson
阅读本文之后,有一个引人注目的引用:
BSON还可以快速编码和解码.例如,整数存储为32(或64)位整数,因此不需要对文本进行解析.对于小整数,这使用比JSON更多的空间,但解析起来要快得多.
从我正在阅读的内容来看,使用BSON的全部意义在于它对CPU的负担更少,编码/处理速度更快.
但是,我使用Node.js进行了一些测试,并使用原生的JSON方法将BSON从水中吹走.一些测试显示JSON快3到5倍.(当使用更多数据类型时,大约6到8个.)
基准代码:
var bson = require('bson');
var BSON = new bson.BSONPure.BSON();
var os = require('os');
console.log(" OS: " + os.type() + " " + os.release() + " (" + os.arch() + ")");
console.log("RAM: " + os.totalmem() / 1048576 + " MB (total), " + os.freemem() / 1048576 + " MB (free)");
console.log("CPU: " + os.cpus()[0].speed + " MHz " + os.cpus()[0].model);
for (var r = 1; r < 4; r++) {
console.log("\nRun #" + r + ":");
var obj = {
'abcdef': 1,
'qqq': 13,
'19': [1, 2, 3, 4]
};
var start = Date.now();
for (var i = 0; i < 500000; i++) {
JSON.parse(JSON.stringify(obj));
}
var stop = Date.now();
console.log("\t JSON: " + (stop - start) + " ms");
start = Date.now();
for (var i = 0; i < 500000; i++) {
BSON.deserialize(BSON.serialize(obj));
}
stop = Date.now();
console.log("\t Bson: " + (stop - start) + " ms");
}
Run Code Online (Sandbox Code Playgroud)
OS: Windows_NT 6.1.7601 (x64)
RAM: 8174.1171875 MB (total), 5105.03515625 MB (free)
CPU: 3515 MHz AMD FX(tm)-6300 Six-Core Processor
Run #1:
JSON: 1820 ms
Bson: 8639 ms
Run #2:
JSON: 1890 ms
Bson: 8627 ms
Run #3:
JSON: 1882 ms
Bson: 8692 ms
Run Code Online (Sandbox Code Playgroud)
话虽如此,我正在寻找通过websockets发送和接收数据的二进制方法.BSON完美地做到了这一点,但是,在查看基准测试结果时,当序列化/反序列化对象需要更长时间时,BSON如何减少对CPU的负担?
BSON是否弥补了它使用的额外CPU使用率,因为没有基于文本的 websockets 转换为UTF-8 ?这会在这方面达到平衡吗?
下面@Joe粘土,这里是结果stringify和serializing唯一:
Run #1:
JSON: 922 ms
Bson: 355 5ms
Run Code Online (Sandbox Code Playgroud)
Mat*_*247 18
问题不应该是为什么JSON比BSON更快?但为什么JSON比node.js中的BSON更快?.
在大多数环境中,像BSON,MessagePack或CBOR这样的二进制编码比文本JSON编码更容易编码.然而,javascript环境(如v8/node.js)针对JSON处理进行了大量优化(因为它是javascript的一个子集).JSON de/encoding可能直接在JS VM中以优化方式在本机代码中实现.然而,javascript VM并未针对表示和操作字节数组(由BSON库使用)进行优化.节点本机缓冲区类型可能比纯JS数组更好,但使用它(并在JS中执行JS字符串(UTF16) - > UTF8字节解码)仍然比内置的JSON序列化慢.
在其他语言中,如直接字节数组访问的C++和utf8字符串类型,结果可能完全不同.
| 归档时间: |
|
| 查看次数: |
6327 次 |
| 最近记录: |