Nehmen Sie diesen Code, typischen Knoten js Beispiel eines Http-Server, auf denen habe ich eine Verzögerung von 5 Sekunden zugegeben woanders etwas async Arbeit statt zu simulieren:Warum blockiert setTimeout meine Node.js App?
Ich erwarte, dassconst http = require('http');
const hostname = '127.0.0.1';
const port = 8080;
http.createServer((req, res) => {
setTimeout(()=>{
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
},5000);
}).listen(port, hostname,() => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Was würde ist, dass, wenn ich öffne 5 Registerkarten, sagen sie mal mit einer Verzögerung von einer halben Sekunde zwischen jeder Öffnung der Server sollte „reagieren“ zu jedem Reiter mehr oder weniger mit diesen Timings:
t=0s - I open first tab
t=0.5s - I open second tab
t=1s - I open third tab
...
t=5s - First tab stops loading, server has replied
t=5.5s - Second tab stops loading, server has replied
t=6s - Third tab stops loading, server has replied
t=6.5s - Fourth tab stops loading, server has replied
t=7s - Fifth tab stops loading, server has replied
jedoch das Verhalten ich sehe ist die folgenden:
t=0s - I open first tab
t=0.5s - I open second tab
t=1s - I open third tab
...
t=5s - First tab stops loading, server has replied
t=10s - Second tab stops loading, server has replied
t=15s - Third tab stops loading, server has replied
t=20s - Fourth tab stops loading, server has replied
t=25s - Fifth tab stops loading, server has replied
Als würden die nachfolgenden Anfragen nicht gestartet, bis der erste fertig ist. Fehle ich hier etwas? Ich dachte, der ganze Sinn von Node JS wäre, asynchrone Aufgaben aus einem einzigen Thread ausführen zu können?
FYI, müssen Sie auch für Favicon Anfragen, die Browser zusammen mit einer Seitenanforderung, die auch die Dinge komplizieren können, machen aufpassen . – jfriend00