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
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. transferOptional-
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
MessagePortviaMessageEvent.ports. optionsOptional-
Ein optionales Objekt, das die folgenden Eigenschaften enthält:
transferOptional-
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.
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.