Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. Les API Web
  3. Worker
  4. Worker.postMessage()

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

Worker.postMessage()

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

La méthodeWorker.postMessage() envoie un message à la portée locale du worker. Cette fonction accepte un seul paramètre, qui est la donnée à envoyer au worker. Cette donnée peut-être de n'importe quelle valeur ou un objet JavaScript pris en charge par l'algorithme de clone structuré, qui inclut les références cycliques.

Le Worker peut renvoyer une information au thread qui l'a créé en utilisant la méthodeDedicatedWorkerGlobalScope.postMessage.

Syntaxe

js
worker.postMessage(aMessage, [transferList]);

Paramètres

aMessage

L'objet à envoyer au worker; il va être dans le champ de donnéedata dans l'évènement délivré au gestonnaire d'évènementWorker.onmessage. Cette donnée peut être de n'importe quelle valeur ou un objet JavaScript pris en charge par l'algorithme declone structuré, qui inclut les références cycliques.

transferListFacultatif

Un tableau optionnel d'objetsTransferable desquels on doit transférer la propriété. Si la propriété d'un objet est transférée, il devient inutilisable (neutralisé) pour le contexte émétteur et devient disponible uniquement pour le worker auquel cela a été envoyé.

Seulement des objets de typesMessagePort,ArrayBuffer ouImageBitmap peuvent être transférés.null n'est pas une valeur accéptée pourtransfer.

Retour

Vide.

Exemple

L'extrait de code suivant montre la création d'un objetWorker en utilisant le constructeurWorker(). Quand les deux champs de formulaire (fisrt etsecond) ont été changés, les évènementschange invoquentpostMessage() pour envoyer la valeur des deux entrées auworker courant.

js
var myWorker = new Worker("worker.js");first.onchange = function () {  myWorker.postMessage([first.value, second.value]);  console.log("Message posted to worker");};second.onchange = function () {  myWorker.postMessage([first.value, second.value]);  console.log("Message posted to worker");};

Pour l'exemple en entier, voirBasic dedicated worder example (démonstration).

Note :postMessage() peut n'envoyer qu'un objet à la fois. Comme ci-dessus, si vous voulez envoyez plusieurs valeurs, vous pouvez utiliser un tableau.

Exemple de transfert

Cette exemple montre une extension pour Firefox qui transfert unArrarBuffer depuis lethread principal vers leChromeWorker, et leChromeWorker répond au le thread principal.

Main thread code

js
var myWorker = new ChromeWorker(self.path + "myWorker.js");function handleMessageFromWorker(msg) {  console.log("incoming message from worker, msg:", msg);  switch (msg.data.aTopic) {    case "do_sendMainArrBuff":      sendMainArrBuff(msg.data.aBuf);      break;    default:      throw "no aTopic on incoming message to ChromeWorker";  }}myWorker.addEventListener("message", handleMessageFromWorker);// Ok lets create the buffer and send itvar arrBuf = new ArrayBuffer(8);console.info("arrBuf.byteLength pre transfer:", arrBuf.byteLength);myWorker.postMessage(  {    aTopic: "do_sendWorkerArrBuff",    aBuf: arrBuf, // The array buffer that we passed to the transferrable section 3 lines below  },  [    arrBuf, // The array buffer we created 9 lines above  ],);console.info("arrBuf.byteLength post transfer:", arrBuf.byteLength);

Worker code

js
self.onmessage = function (msg) {  switch (msg.data.aTopic) {    case "do_sendWorkerArrBuff":      sendWorkerArrBuff(msg.data.aBuf);      break;    default:      throw "no aTopic on incoming message to ChromeWorker";  }};function sendWorkerArrBuff(aBuf) {  console.info("from worker, PRE send back aBuf.byteLength:", aBuf.byteLength);  self.postMessage({ aTopic: "do_sendMainArrBuff", aBuf: aBuf }, [aBuf]);  console.info("from worker, POST send back aBuf.byteLength:", aBuf.byteLength);}

Output logged

arrBuf.byteLength pre transfer: 8                              bootstrap.js:40arrBuf.byteLength post transfer: 0                             bootstrap.js:42from worker, PRE send back aBuf.byteLength: 8                  myWorker.js:5:2incoming message from worker, msg: message { ... }             bootstrap.js:20got back buf in main thread, aBuf.byteLength: 8                bootstrap.js:12from worker, POST send back aBuf.byteLength: 0                 myWorker.js:7:2

byteLength passe à 0 quand il est transferré. Pour voir l'exemple de cette extension de démonstration de Firefox, voirGitHub :: ChromeWorker - demo-transfer-arraybuffer

Spécifications

Specification
HTML
# dom-worker-postmessage-dev

Compatibilité des navigateurs

Voir aussi

  • L'interfaceWorker auquel il appartient.

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2026 Movatter.jp