在请求过程中节点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相当慢。
编辑:除此之外,解释器将简单地跳过循环,如果没有在其中的操作。 如果你真的做了一些事情,那当然需要时间。