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

时间:2013-09-26 17:59:07

标签: javascript performance node.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");

如果我们运行此代码,我们应该等待很多分钟得到响应。但是如果在没有console.log("Request received");的情况下运行for for,我们得到高速响应? 为什么呢?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

您在每个请求上写着 17MB stdout 。服务器可能需要几分钟才能响应。

答案 2 :(得分:0)

我认为因为在控制台get time过程中写console.log("Request received");

答案 3 :(得分:0)

console.log非常慢,就像在STDOUT控制台上执行某些操作的其他print / echo / sysout一样。

编辑:除此之外,如果没有操作,解释器将简单地跳过循环。如果你真的在里面做了什么,那当然需要时间。