Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

DedicatedWorkerGlobalScope: postMessage()-Methode

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

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

Die postMessage()-Methode des DedicatedWorkerGlobalScope-Interfaces sendet eine Nachricht an den Hauptthread, der ihn erzeugt hat.

Diese Methode akzeptiert einen Datenparameter, der Daten enthält, die vom Worker an den Hauptthread kopiert werden sollen. Die Daten können jeden Wert oder jedes JavaScript-Objekt umfassen, das vom structured clone-Algorithmus behandelt wird, einschließlich zyklischer Referenzen.

Die Methode akzeptiert auch ein optionales Array von transferierbaren Objekten, die an den Hauptthread übertragen werden sollen; Im Gegensatz zu dem Datenparameter sind übertragene Objekte im Worker-Thread nicht mehr verwendbar. (Wo möglich, werden Objekte mittels einer leistungsstarken Zero-Copy-Operation übertragen).

Der Haupt-Scope, der den Worker erzeugt hat, kann mithilfe der Worker.postMessage-Methode Informationen an den Thread, der ihn erzeugt hat, zurücksenden.

Syntax

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

Parameter

message

Das Objekt, das an den Hauptthread übermittelt werden soll; dieses wird im Datenfeld im Event, das an das message-Event geliefert wird, enthalten sein. Dies kann jeden Wert oder jedes JavaScript-Objekt umfassen, das vom structured clone-Algorithmus behandelt wird, einschließlich zyklischer Referenzen.

transfer Optional

Ein optionales Array von transferierbaren Objekten, deren Eigentum übertragen werden soll. Das Eigentum dieser Objekte wird der Empfängerseite übertragen und sie sind auf der sendenden Seite nicht mehr verwendbar. Diese transferierbaren Objekte werden nicht automatisch gesendet; sie müssen entweder in der Nachricht enthalten sein oder dem Empfänger auf andere Weise zugänglich gemacht werden, z. B. über MessagePort via MessageEvent.ports.

options Optional

Ein optionales Objekt, das die folgenden Eigenschaften enthält:

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 vom Hauptskript zu verarbeiten. Innerhalb des Handlers wird eine Berechnung durchgeführt, aus der eine Ergebnisnachricht erstellt wird; diese wird dann mithilfe von postMessage(workerResult); an den Hauptthread 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 an einem Worker-Objekt aufgerufen werden, während Sie im Worker-Skript nur onmessage benötigen, da der Worker effektiv der globale Scope (DedicatedWorkerGlobalScope) ist.

Ein vollständiges Beispiel finden Sie in unserem einfachen dedizierten Worker-Beispiel (dedizierten Worker ausführen).

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

Spezifikationen

Spezifikation
HTML
# dom-dedicatedworkerglobalscope-postmessage-dev

Browser-Kompatibilität

Siehe auch

Das DedicatedWorkerGlobalScope-Interface, zu dem es gehört.