<p></p> <p>
Wird ein Ajax Request aufgerufen, läuft der Code wie gewohnt weiter. Kommt die Antwort, wird der Callback ausgeführt und es fühlt sich an, als würden mehrere Prozesse ablaufen. Doch handelt es sich hier um Multithreading oder ist alles nur vorgegaukelt? Leider ist diese Parallelität nur vorgetäuscht. Javascript wird nur innerhalb eines Prozesses ausgeführt. Selbst in Node.js gibt es nur einen Prozess.
Die besten Antworten habe ich im Mozilla Developer Network und bei HOTTO Node gefunden.</p> <h1>Wie funktioniert es trotzdem</h1> <p>Durch die Funktion setTimeout() wird die Ausführung der übergebenen Funktion an das Ende der Ausführungskette gestellt. Die übergebene Methode wird erst ausgeführt, wenn die Zeitspanne abgelaufen ist und die synchronen Bearbeitung fertig ist. Das war es auch schon. Durch diesen einfache Trick wird eine Blockierung der Benutzeransicht verhindert.</p> <h1>Weiter Möglichkeit innerhalb von Node.js</h1> <p>Von Node.js wird die Funktion process.nextTick(callback) bereit gestellt.
Diese ist effektiver, da direkt der Eventstack von Node.js verwendet wird.
Die Bearbeitung des Callback wird erst nach Fertigstellung der aufrufenden Methode ausgeführt.</p> <h1>THIS Kontextänderung</h1> <p>In meiner Testumgebung habe ich nicht die Möglichkeit diese Eigenschaft zu prüfen. Laut anderer Beiträge wechselt die Referenz von this auf window. </p> <h1>Test mit Node.js</h1> <p>Diese kleine Anwendung ist mein erster Versuch mit Node.js. Für mich ist es auf jeden Fall die einfachste Lösung ein paar Zeilen JavaScript aus zu führen.</p><pre class="brush: js;">var foo = function(){
console.log(‘foo’);
};
// Prüfen ob das Verhalten innerhalb einer Funktion gleich bleibt.
(function(){
setTimeout(
function(){
console.log(‘SET Timeout 1’);
},0);
console.log(‘bar’);
//Für eine längere Ausführungszeit
for(var i=0; i<5000000;i++){
Math.random();
}
})();
foo();
setTimeout(
function(){
console.log(‘SET Timeout 2’);
},0); </pre>

Ergebnis:
bar
foo
SET Timeout 1
SET Timeout 2

Zusammenfassung

JavaScript wird in einem Thread ausgeführt. Das sollte bei Browseranwendungen vollkommen ausreichen. Bei Anwendungen, wie sie in Node.js erstellt werden können, sollte man sich dazu sicher mehr Gedanken machen. Vor allem CPU intensive Aufgaben können hier Schwierigkeiten verursachen. Zumindest können mehrere Node.js Serveranwendungen miteinander verbunden werden.