HTML Web Workers-API
Ein Webworker ist ein JavaScript, das im Hintergrund ausgeführt wird, ohne die Leistung der Seite zu beeinträchtigen.
Was ist ein Webworker?
Beim Ausführen von Skripts in einer HTML-Seite reagiert die Seite nicht mehr, bis das Skript beendet ist.
Ein Webworker ist ein JavaScript, das unabhängig von anderen Skripten im Hintergrund ausgeführt wird, ohne die Leistung der Seite zu beeinträchtigen. Sie können weiterhin tun, was Sie wollen: klicken, Dinge auswählen usw., während der Webworker im Hintergrund läuft.
Browser-Unterstützung
Die Zahlen in der Tabelle geben die erste Browserversion an, die Web Workers vollständig unterstützt.
API | |||||
---|---|---|---|---|---|
Web Workers | 4.0 | 10.0 | 3.5 | 4.0 | 11.5 |
Beispiel für HTML-Webworker
Das folgende Beispiel erstellt einen einfachen Webworker, der im Hintergrund Zahlen zählt:
Beispiel
Überprüfen Sie den Web Worker-Support
Überprüfen Sie vor dem Erstellen eines Web Workers, ob der Browser des Benutzers dies unterstützt:
if (typeof(Worker) !== "undefined") {
// Yes! Web worker support!
// Some code.....
}
else {
// Sorry! No Web Worker support..
}
Erstellen Sie eine Web-Worker-Datei
Lassen Sie uns nun unseren Web Worker in einem externen JavaScript erstellen.
Hier erstellen wir ein Skript, das zählt. Das Skript wird in der Datei „demo_workers.js“ gespeichert:
var i = 0;
function timedCount()
{
i = i + 1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
Der wichtige Teil des obigen Codes ist die postMessage()
Methode, die verwendet wird, um eine Nachricht zurück an die HTML-Seite zu senden.
Hinweis: Normalerweise werden Webworker nicht für solch einfache Skripte verwendet, sondern für CPU-intensivere Aufgaben.
Erstellen Sie ein Web-Worker-Objekt
Jetzt, da wir die Web-Worker-Datei haben, müssen wir sie von einer HTML-Seite aufrufen.
Die folgenden Zeilen prüfen, ob der Worker bereits existiert, falls nicht – es erstellt ein neues Webworker-Objekt und führt den Code in „demo_workers.js“ aus:
if (typeof(w) == "undefined") {
w = new Worker("demo_workers.js");
}
Dann können wir Nachrichten vom Webworker senden und empfangen.
Fügen Sie dem Webworker einen "onmessage"-Ereignis-Listener hinzu.
w.onmessage = function(event){
document.getElementById("result").innerHTML = event.data;
};
Wenn der Webworker eine Nachricht postet, wird der Code im Ereignis-Listener ausgeführt. Die Daten des Webworkers werden in event.data gespeichert.
Einen Web Worker kündigen
Wenn ein Web-Worker-Objekt erstellt wird, wartet es weiterhin auf Nachrichten (auch nachdem das externe Skript beendet ist), bis es beendet wird.
terminate()
Verwenden Sie die Methode , um einen Webworker zu kündigen und Browser-/Computerressourcen freizugeben
:
w.terminate();
Verwenden Sie den Web Worker erneut
Wenn Sie die Worker-Variable auf undefiniert setzen, nachdem sie beendet wurde, können Sie den Code wiederverwenden:
w = undefined;
Vollständiger Beispielcode für Web Worker
Wir haben bereits den Worker-Code in der .js-Datei gesehen. Unten ist der Code für die HTML-Seite:
Beispiel
<!DOCTYPE html>
<html>
<body>
<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>
<script>
var w;
function startWorker()
{
if (typeof(Worker) !== "undefined")
{
if (typeof(w) == "undefined") {
w = new Worker("demo_workers.js");
}
w.onmessage = function(event) {
document.getElementById("result").innerHTML = event.data;
};
}
else
{
document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
}
}
function stopWorker()
{
w.terminate();
w = undefined;
}
</script>
</body>
</html>
Web Worker und das DOM
Da sich Webworker in externen Dateien befinden, haben sie keinen Zugriff auf die folgenden JavaScript-Objekte:
- Das Fensterobjekt
- Das Dokumentobjekt
- Das übergeordnete Objekt