Worker
Das Worker
Interface der Web Workers API beschreibt eine im Hintergrund ausgeführte Programmlogik, die leicht erstellt werden kann und Nachrichten mit dem Ersteller austauschen. Einen Worker erzeugen erfolgt einfach über den Aufruf des Worker()
Konstruktors unter Angabe eines Scripts, welches in dem Worker Thread ausgeführt werden soll.
Worker selbst können zudem weitere (sog. "verschachtelte") Worker erzeugen, solange diese in demselben origin wie die übergeordnete Seite liegen (Achtung: verschachtelte Worker sind aktuell nicht in Blink implementiert). Zusätzlich können Worker das XMLHttpRequest
nutzen, um auf Netzwerk I/O zuzugreifen, unter der Voraussetzung, dass die Attribute responseXML
und channel
des XMLHttpRequest
immer den Wert null
zurück liefern.
Nicht alle Interfaces und Funktionen sind verfügbar für das mit dem Worker
assoziierte Script.
Zur Verwendung eines Worker
s mit Zugriff auf js-ctypes in Browser-Erweiterungen (Extension) für den Firefox bitte das ChromeWorker
Objekt nutzen.
Constructors
Worker()
(en-US)- Erzeugt einen neuen Web Worker, der das über seine URL referenzierte Script ausführt. Worker können auch über Blobs erzeugt werden.
Properties
Erbt die Eigenschaften seines parents, EventTarget
, und implementiert die Eigenschaften von AbstractWorker
(en-US).
Event handlers
AbstractWorker.onerror
(en-US)- Ein
EventListener
, welcher jedesmal dann aufgerufen wird, wenn einErrorEvent
(en-US) des Typserror
den Worker erreicht. Dies ist geerbt vonAbstractWorker
(en-US). Worker.onmessage
(en-US)- Ein
EventListener
, welcher jedesmal dann aufgerufen wird, wenn einMessageEvent
des Typsmessage
den Worker erreicht — d.h. der Worker erhält eine Nachricht von seinem übergeordneten document viaDedicatedWorkerGlobalScope.postMessage
(en-US). Diese Nachricht wird innerhalb des Events in derdata
(en-US) Eigenschaft gespeichert. Worker.onmessageerror
(en-US)- Der
EventHandler
(en-US), dessen Code aufgerufen werden soll, wenn es zu einemmessageerror
Event kommt.
Methods
Erbt die Methoden seines parents, EventTarget
, und implementiert die Methoden von AbstractWorker
(en-US).
Worker.postMessage()
(en-US)- Sendet eine Nachricht an den Worker. Diese kann dabei aus einem
beliebigen
JavaScript Objekt bestehen. Worker.terminate()
(en-US)- Beendet den Worker unmittelbar. Hierüber besteht dabei nicht die Möglichkeit, dem Worker die Gelegenheit für ein geordnetes Beenden von laufenden Operationen zu geben. Vielmehr wird der Worker sofort beendet. ServiceWorker Instanzen unterstützen diese Methode nicht.
Example
Das nachfolgende Beispiel zeigt wie ein Worker
mittels des Worker()
(en-US) Konstruktors erzeugt und verwendet wird:
var myWorker = new Worker('worker.js');
var first = document.querySelector('#number1');
var second = document.querySelector('#number2');
first.onchange = function() {
myWorker.postMessage([first.value,second.value]);
console.log('Message posted to worker');
}
Ein vollständiges Beispiel findet sich hier: Basic dedicated worker example (run dedicated worker).
Specifications
Specification | Status | Comment |
---|---|---|
HTML Living Standard Die Definition von 'Worker' in dieser Spezifikation. |
Lebender Standard |
Browser compatibility
Die Unterstützung der einzelnen Worker ist abhängig vom Typ und variiert. Wie ein Worker konkret unterstützt wird, kann der Seite zu dem Worker Typ entnommen werden.
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 4 | (Ja) | 3.5 | 10.0 | 10.6 | 4 |
Constructor name option |
(Ja) | ? | 55 (55) | ? | ? | ? |
onmessageerror |
60 | ? | 57 (57) | Nicht unterstützt | ? | ? |
Feature | Android | Edge | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | 4.4 | (Ja) | 3.5 | 10.0 | 11.5 | 5.1 | ? |
Constructor name option |
? | ? | 55.0 (55) | ? | ? | ? | (Ja) |
onmessageerror |
60 | ? | 57.0 (57) | Nicht unterstützt | ? | ? | ? |
Cross-origin worker error behaviour
In früheren Browserversionen kam es zu einem SecurityError
bei dem Versuch ein Script für einen cross-origin worker zu laden. In neueren Browsern wird, aufgrund einer Änderung der Spezifikation, stattdessen ein error (en-US)
Event erzeugt. Mehr über den Umgang mit solchen Fehlern ist hier zu finden: Loading cross-origin worker now fires error event instead of throwing; worker in sandboxed iframe no longer allowed.
See also
- Using web workers
- Functions available to workers
- Andere Workers Typen
SharedWorker
und ServiceWorker. - Nicht Standard, die Gecko-spezifischen Workers
ChromeWorker
, für Browser-Erweiterungen.