我现在是Node.js开发人员一年了。昨晚我以为我会在express和http模块之间做一个基准测试,基本上它是一个简单的promise,返回一个字符串并传递给响应,现在我看到http速度相当快,但我遇到了另一个问题,如果我在ab测试中将setTimeout
设置为50毫秒,并发度为500和100000个请求,则响应时间比setTimeout
0或process.nextTick
快两倍。
现在我知道setTimeout
将它带到下一个循环,但在队列结束时,nextTick
将它放在下一个循环中,但我真的不明白为什么{{1} 50ms比setTimeout
0快。
即使没有setTimeout,ab测试也比setTimeout 50ms慢很多。
我怀疑是apache ab测试的东西,或者我错过了节点的东西?
setTimeout
http.createServer((req,res)=>{
setTimeout(()=>{
check().then(data=>{
res.write(data);
res.end();
})
},0)
}).listen(3000);
let check = () =>{
return Promise.try(()=>{
return 'done with Async'
})
};
答案 0 :(得分:1)
使用setTimeout(0)时,您正在该进程上添加一个额外的作业,这可能需要花费一些时间。但是,使用setTimeout(50)可以使请求在队列中准备就绪,并且在50ms之后,它们将全部被发送出去,从而浪费掉额外的时间间隔。例如,考虑一个请求需要花费10毫秒才能发送,而获得响应则需要10毫秒。通过使用setTimeout(50),发送500个请求将花费5000ms,再加上50ms的超时时间和10ms的响应时间,将花费5060ms。现在,如果我们使用setTimeout(0),则将有10ms的时间发送请求和10ms的响应时间。因此,对于500个请求,它将花费10000ms。