我正在尝试简单的NodeJS应用程序,以便我能够理解异步性质.
但我的问题是,一旦我/home从浏览器点击" "它等待响应,同时当" /"被击中时,它首先等待/home""的响应,然后响应" /"请求.
我担心的是,如果其中一个请求需要大量处理,那么我们不能再请求另一个请求了吗?它是否正确?
app.get("/", function(request, response) {
console.log("/ invoked");
response.writeHead(200, {'Content-Type' : 'text/plain'});
response.write('Logged in! Welcome!');
response.end();
});
app.get("/home", function(request, response) {
console.log("/home invoked");
var obj = {
"fname" : "Dead",
"lname" : "Pool"
}
for (var i = 0; i < 999999999; i++) {
for (var i = 0; i < 2; i++) {
// BS
};
};
response.writeHead(200, {'Content-Type' : 'application/json'});
response.write(JSON.stringify(obj));
response.end();
});
Run Code Online (Sandbox Code Playgroud)
好问题,现在,尽管 Node.js 具有异步特性,但这段代码:
for (var i = 0; i < 999999999; i++) {
for (var i = 0; i < 2; i++) {
// BS
};
};
Run Code Online (Sandbox Code Playgroud)
不是异步实际上阻塞了节点主线程。因此,所有其他请求都必须等到这个大for循环结束。
为了并行进行一些繁重的计算,我建议使用setTimeout或setInterval来实现您的目标:
var i=0;
var interval = setInterval(function() {
if(i++>=999999999){
clearInterval(interval);
}
//do stuff here
},5);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,我建议搜索“Node.js 事件循环”
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |