我一直在运行一些测试,以找出使用最新Socket.IO版本(v1.4.5)发送特定数据的最快方法。
我尝试传递一个对象,一个字符串,一个Uint8Array和一个Buffer。我排除了生成格式化数据的时间。
var d = Date.now();
var obj = {"q":"-dgn,pqUsY","u":{"Gm5SP":[1109,1001],"t9sck":[2026],"hpcM8":[1407,841],"DNB7S":[1285,478],"PV7Dt":[2043,986,31]}};
var objStr = JSON.stringify(obj);
var objUint8 = new Uint8Array(objStr.length);
for(var i = 0 ; i < objStr.length; i++)
objUint8[i] = objStr[i].charCodeAt(i);
var objBuffer = new Buffer(objUint8);
for(var i = 0 ; i < 20000; i++){
if(num === 0)
socket.emit('a',obj);
if(num === 1)
socket.emit('a',objStr);
if(num === 2)
socket.emit('a',objUint8);
if(num === 3)
socket.emit('a',objBuffer);
}
console.log(Date.now() - d);
结果:
对象:244ms
字符串:126ms
Uint8Array:1292ms
缓冲区:212ms
为什么Uint8Array这么慢?它与NodeJS Buffer真的不太相似吗?缓冲区不应该比字符串更快吗?