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: Dieses Feature ist nur verfügbar in Dedicated Web Workers.
Die postMessage()
Methode der DedicatedWorkerGlobalScope
-Schnittstelle sendet eine Nachricht an den Haupt-Thread, der sie erstellt hat.
Diese akzeptiert einen Datenparameter, der Daten enthält, die vom Worker an den Haupt-Thread kopiert werden sollen. Die Daten können jeden Wert oder JavaScript-Objekt enthalten, das vom structured clone-Algorithmus verarbeitet werden kann, einschließlich zyklischer Referenzen.
Die Methode akzeptiert außerdem ein optionales Array von übertragbaren Objekten, die an den Haupt-Thread übertragen werden sollen; Anders als beim Datenparameter können übertragene Objekte im Worker-Thread nicht mehr verwendet werden. (Wenn möglich, werden Objekte mit einer leistungsstarken Zero-Copy-Operation übertragen).
Der Hauptscope, der den Worker erstellt hat, kann über die Worker.postMessage
-Methode Informationen an den Thread zurücksenden, der ihn erstellt 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 Ereignisses geliefert, das an das
message
-Ereignis gesendet wird. Dies kann jeden Wert oder JavaScript-Objekt enthalten, das vom structured clone-Algorithmus verarbeitet werden kann, einschließlich zyklischer Referenzen. transfer
Optional-
Ein optionales Array von übertragbaren Objekten, deren Besitz übertragen werden soll. Der Besitz dieser Objekte wird der Empfängerseite gegeben und sie sind auf der sendenden Seite nicht mehr verwendbar. Diese übertragbaren Objekte sollten an die Nachricht angehängt werden; andernfalls würden sie verschoben, aber tatsächlich nicht auf der Empfangsseite zugänglich sein.
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 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 Sie im Worker-Skript nur onmessage
benötigen, da der Worker effektiv der globale Scope ist (DedicatedWorkerGlobalScope
).
Für ein vollständiges Beispiel sehen Sie unser Grundlegendes Beispiel für einen dedizierten Worker (dedizierten Worker ausführen).
Note:
postMessage()
kann nur ein einzelnes Objekt auf einmal senden. Wie oben gezeigt, können Sie, wenn Sie mehrere Werte übergeben möchten, ein Array senden.
Spezifikationen
Specification |
---|
HTML Standard # dom-dedicatedworkerglobalscope-postmessage-dev |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
Die DedicatedWorkerGlobalScope
-Schnittstelle, zu der sie gehört.