请考虑以下代码:
var http = require("http");
http.createServer(function(request, response) {
for (var i = 0; i < 1000000; i++) {
console.log("Request received");
}
response.writeHead(200, {
"Content-Type": "text/plain"
});
response.write("Hello World");
response.end();
}).listen(8888, "127.0.0.1");
如果我们运行此代码,我们也应该等待很多分钟以获得响应。但是,如果在 for 中运行 for 而没有console.log("Request received");
,我们会得到高速响应?为什么?
简单地说,空"for"中的一个循环几乎需要零时间。但是带有 console.log() 的输出需要更多的时间,而且也是同步的。
node.js v0.6开始,console.log()
是同步的(即它阻塞了主事件循环)。
您在每个请求上写入大约 17MB 的stdout。服务器可能需要几分钟才能响应。
我认为是因为在控制台中编写console.log("Request received");
获取时间过程。
console.log
非常慢,就像任何其他在STDOUT
控制台上执行某些操作的打印/回显/系统输出一样。
编辑:除此之外,如果没有操作,解释器将简单地跳过循环。如果你真的在其中做了一些事情,那当然需要时间。