在请求过程中节点js的性能

考虑这个代码:

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"); 

如果我们运行这个代码,我们应该等待很多分钟也得到response.But如果运行一个没有console.log("Request received"); 在一个我们得到高速响应? 为什么?

我想因为写console.log("Request received"); 在控制台获取时间的过程。

简单地说,一个空的“for”循环几乎为空。 但是console.log()的输出需要更多的时间,同时也是同步的。

首先从node.js v0.6开始, console.log()是同步的(即阻塞主事件循环)。

你正在写大约17MB标准输出每个请求。 服务器可能需要几分钟才能响应。

console.log与其他任何在你的STDOUT控制台上执行某些操作的print / echo / sysout相当慢。

编辑:除此之外,解释器将简单地跳过循环,如果没有在其中的操作。 如果你真的做了一些事情,那当然需要时间。