Heim >Web-Frontend >js-Tutorial >JavaScript Timer-basierte Pseudo-Threading
Mein vorheriger Artikel, "JavaScript-Ausführung und Browsergrenzwerte", wurde erläutert, wie führende Browser mit dem langlebigen JavaScript-Code umgehen und "nicht reagierende Skript" -Anfehler ausgelöst werden. Da das Verhalten von Browserverhalten nicht möglich ist und die serverseitige Verarbeitung nicht immer eine Option ist, bieten Timer eine praktische Lösung für die Ausführung langer Aufgaben, ohne den Browser einzufrieren.
Was sind JavaScript -Timer?
JavaScript -Timer können nach einer bestimmten Verzögerung die Codeausführung planen. Sie bieten zwei Hauptfunktionen:
setTimeout(function, msec[, arg1 … argN])
: Fügt die bereitgestellte Funktion einmal nach msec
Millisekunden aus. Optionale Argumente können an die Funktion übergeben werden. setInterval(function, msec[, arg1 … argN])
: Ähnlich wie setTimeout
, führt aber wiederholt die Funktion jeder msec
Millisekunden aus, bis sie abgesagt sind. clearTimeout()
und clearInterval()
werden verwendet, um setTimeout
bzw. setInterval
Operationen zu stornieren. Zum Beispiel:
var timerID = setTimeout(myfunction, 500); clearTimeout(timerID); // myfunction() will never be called
Wichtige Hinweise:
setTimeout
und setInterval
Akzeptieren Sie eine Funktion Referenz (keine Klammern). setTimeout(myfunction(), 500);
würde myfunction()
sofort ausführen. setTimeout(f1, 50); setTimeout(f2, 50);
könnte zuerst f2()
ausführen. Timer-basierte Pseudo-Threading
Da der zeitgesteuerte Code nicht sofort ausgeführt wird, wird der Haupt -Thread des Browsers für andere Aufgaben befreit. Dies ermöglicht es uns, lange Prozesse in kleinere Stücke zu zerlegen. Zum Beispiel, um Funktionen f1()
, f2()
und f3()
nacheinander auszuführen:
function ProcessThread(func) { var ms = 20; setTimeout(function() { func.shift()(); if (func.length > 0) { //Improved condition check setTimeout(arguments.callee, ms); } }, ms); } ProcessThread([f1, f2, f3]);
func.shift()
entfernt und gibt das erste Element (eine Funktion) aus dem dann ausgeführten Array zurück. ProcessThread
führt alle Funktionen im Array mit einer Verzögerung von 20 ms aus. Dieser Ansatz funktioniert für eine beliebige Anzahl von Funktionen, vorausgesetzt, keine einzige Funktion überschreitet den Zeitüberschreitungsschwellenwert des Browsers. Die Verarbeitung großer Datensätze erfordern jedoch robustere Techniken, die in einem zukünftigen Beitrag behandelt werden.
häufig gestellte Fragen (FAQs)
Der folgende Abschnitt beantwortet gemeinsame Fragen zu JavaScript-Timern und Pseudo-Threading. Der ursprüngliche FAQ -Abschnitt wurde aus Klarheit und Zuversicht neu organisiert und neu geschrieben. Spezifische Beispiele wurden vereinfacht.
Was ist das Pseudo-Threading in JavaScript? Pseudo-Threading simuliert Multi-Threading, indem lange Aufgaben in kleinere Teile zerlegt und ihre Ausführung mit Timern geplant werden, sodass der Browser andere Aufgaben dazwischen erledigen kann.
Wie funktioniert ein JavaScript -Timer?
So implementieren Sie Pseudo-Threading mit JavaScript-Timer? Machen Sie mit setTimeout()
. setInterval()
Einschränkungen des Pseudo-Threading? Es ermöglicht keine echte parallele Ausführung; Aufgaben werden nacheinander ausgeführt, wenn auch mit verschachtelten Browseraufgaben. Ein langsamer Stück verzögert nachfolgende.
setInterval()
clearInterval()
Pseudo-Threading gegen tatsächliche Threading (z. B. Python)? JavaScripts Pseudo-Threading ist einfacher, aber weniger leistungsfähig für CPU-gebundene Aufgaben.
Alternativen zum Pseudo-Threading (Versprechen, asynchronen/warten)?
stoppen ein Pseudo-Thread?Verwenden Sie .
Pseudo-Threading und Webarbeiter? Arbeiter laufen im Hintergrund.
async/await
Praktische Anwendungen von Pseudo-Threading?
Bibliotheken/Frameworks für Pseudo-Threading? Die integrierten Timer von JavaScript reichen normalerweise aus.
Das obige ist der detaillierte Inhalt vonJavaScript Timer-basierte Pseudo-Threading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!