DedicatedWorkerGlobalScope: postMessage()-Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Hinweis: Diese Funktion ist nur in Dedicated Web Workers verfügbar.

Die postMessage()-Methode der DedicatedWorkerGlobalScope-Schnittstelle sendet eine Nachricht an den Hauptthread, der sie erstellt hat.

Diese akzeptiert einen Datenparameter, der die zu kopierenden Daten vom Worker zum Haupt-Thread enthält. Die Daten können jeden Wert oder jedes JavaScript-Objekt enthalten, das vom Structured Clone-Algorithmus behandelt wird, der zirkuläre Verweise einschließt.

Die Methode akzeptiert auch ein optionales Array von übertragbaren Objekten, um sie an den Haupt-Thread zu übertragen; im Gegensatz zum Datenparameter sind übertragene Objekte im Worker-Thread nicht mehr nutzbar. (Wenn möglich, werden Objekte mit einer leistungsstarken Zero-Copy-Operation übertragen).

Der Hauptbereich, der den Worker erzeugt hat, kann mit der Worker.postMessage-Methode Informationen an den Thread zurücksenden, der ihn erzeugt hat.

Syntax

js
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)

Parameter

message

Das Objekt, das an den Haupt-Thread übermittelt werden soll; dies wird im Datenfeld des an das message-Event übermittelten Events vorhanden sein. Dies kann jeden Wert oder jedes JavaScript-Objekt enthalten, das vom Structured Clone-Algorithmus behandelt wird, der zirkuläre Verweise einschließt.

transfer Optional

Ein optionales Array von übertragbaren Objekten, deren Eigentum übertragen werden soll. Das Eigentum dieser Objekte wird auf die Zielseite übertragen und sie sind auf der sendenden Seite nicht mehr nutzbar. Diese übertragbaren Objekte sollten an die Nachricht angehängt werden; andernfalls würden sie verschoben, aber tatsächlich nicht zugänglich auf der empfangenden Seite sein.

options Optional

Ein optionales Objekt mit den folgenden Eigenschaften:

transfer Optional

Hat die gleiche Bedeutung wie der transfer-Parameter.

Rückgabewert

Keiner (undefined).

Beispiele

Der folgende Codeausschnitt zeigt worker.js, in dem ein onmessage-Handler verwendet wird, um Nachrichten aus dem Hauptskript zu bearbeiten. Innerhalb des Handlers wird eine Berechnung durchgeführt, aus der eine Ergebnisnachricht erzeugt wird; diese wird dann mit postMessage(workerResult); an den Haupt-Thread zurückgesendet.

js
onmessage = (e) => {
  console.log("Message received from main script");
  const workerResult = `Result: ${e.data[0] * e.data[1]}`;
  console.log("Posting message back to main script");
  postMessage(workerResult);
};

Im Hauptskript müsste onmessage auf einem Worker-Objekt aufgerufen werden, während im Worker-Skript nur onmessage benötigt wird, da der Worker effektiv der globale Bereich (DedicatedWorkerGlobalScope) ist.

Für ein vollständiges Beispiel siehe unser Einfaches dedicatetes Worker-Beispiel (ausführen dedicateten Worker).

Hinweis:>postMessage() kann nur ein einziges Objekt gleichzeitig senden. Wie oben zu sehen, können Sie, wenn Sie mehrere Werte übergeben möchten, ein Array senden.

Spezifikationen

Specification
HTML
# dom-dedicatedworkerglobalscope-postmessage-dev

Browser-Kompatibilität

Siehe auch

Die DedicatedWorkerGlobalScope-Schnittstelle, zu der es gehört.