SharedWorker

Das SharedWorker Interface reprĂ€sentiert eine spezielle Art von Worker, auf welchen durch mehrere Kontexte zugegeriffen werden kann. Hier kann es sich um verschiedene Tabs, iFrames oder auch Worker handeln. Diese implementieren ein anderes Interface als dedicated Worker und haben einen anderen Global Scope SharedWorkerGlobalScope (en-US).

Note: Wenn auf einen SharedWorker von mehreren Browser Kontexten aus zugegriffen wird mĂŒssen all diese denselben Urpsrung haben. (Dasselbe Protocol, Host und Port)

Konstruktoren

SharedWorker() (en-US)
Erstellt einen Shared Web Worker, der ein Script zu einer angegebenen URL ausfĂŒhrt.

Eigenschaften

Erbt Eigenschaften von dem Parent EventTarget und implementiert Eigenschaften von AbstractWorker (en-US).

AbstractWorker.onerror (en-US)
Ist einEventListener der immer aufgerufen wird wenn ein ErrorEvent (en-US) vom Typ error durch den Worker lĂ€uft.
SharedWorker.port (en-US) SchreibgeschĂŒtzt
Returnt ein MessagePort (en-US) Objekt, welches zum Kommunizieren und Kontrollieren des Shared Workers verwendet wird.

Methoden

Erbt Methoden von dem Parent EventTarget und implementiert Methoden von AbstractWorker (en-US).

Beispiel

In unserem Grundlegenden Shared Worker Beispiel (Shared Worker ausfĂŒhren), haben wir zwei HTML Seiten, von denen beide etwas JavaScript verwenden um simple Kalkulationen auszufĂŒhren. Die verschiedenen Skripte verwenden dasselbe Worker File um die Kalkulation durchzufĂŒhren. Beide können auf dieses zugreifen, auch wenn diese in verschiedenen Fenstern ausgefĂŒhrt werden.

Das folgende Code Beispiel zeigt das Erstellen eines SharedWorker Objekts unter der Verwendung des SharedWorker() (en-US) Konstruktors. Beide Skripte enthalten:

var myWorker = new SharedWorker('worker.js');

Beide Skripte greifen dann auf den Worker durch ein MessagePort (en-US) Objekt zu, welches mithilfe von SharedWorker.port (en-US) erstellt wurde. Wenn das onmessage Event mithilfe von addEventListener angehÀngt wurde, wird der Port automatisch gestartet mittels der start() Methode:

myWorker.port.start();

Wenn der Port gestartet ist senden beide Skripte Nachrichten an den Worker und behandeln die empfangenen Nachrichten von port.postMessage() und port.onmessage:

first.onchange = function() {
  myWorker.port.postMessage([first.value,second.value]);
  console.log('Message posted to worker');
}

second.onchange = function() {
  myWorker.port.postMessage([first.value,second.value]);
  console.log('Message posted to worker');
}

myWorker.port.onmessage = function(e) {
  result1.textContent = e.data;
  console.log('Message received from worker');
}

Innerhalb des Workers verwenden wird den SharedWorkerGlobalScope.onconnect (en-US) Handler um uns an den oben genannten Port zu verbinden. Die mit dem Worker verbundenen Ports sind durch die Eigenschaft ports im connect Event zugĂ€nglich. Anschließend verwenden wir die MessagePort (en-US) start() Methode um den Port zu starten und verwenden den onmessage Handler um die Nachrichten aus dem Main Thread zu behandeln.

onconnect = function(e) {
  var port = e.ports[0];

  port.addEventListener('message', function(e) {
    var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
    port.postMessage(workerResult);
  });

  port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
}

Spezifikationen

Spezifikation Status Kommentar
HTML Living Standard
Die Definition von 'SharedWorker' in dieser Spezifikation.
Lebender Standard Keine Änderung von Unknown.

Browser KompatibilitÀt

BCD tables only load in the browser

Siehe auch