1

考虑这段代码:

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");,我们会得到高速响应吗?为什么?

4

4 回答 4

1

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

于 2013-09-26T18:08:51.493 回答
1

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

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

于 2013-09-26T19:51:36.883 回答
0

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

于 2013-09-26T18:03:54.640 回答
0

console.logSTDOUT与在您的控制台上执行某些操作的任何其他 print/echo/sysout 一样非常慢。

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

于 2013-09-26T18:06:07.370 回答