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
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.
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.