Worker

L'interface Worker de l'API Web Workers représente une tâche de fond qui peut facilement être créée et peut envoyer des messages en retour à son créateur. Créer un Worker est aussi simple que d'appeler le constructeur Worker(), en spécifiant un script qui définira le comportement du thread du worker.

Notez qu'un worker peut lui aussi lancer d'autre Worker tant que ces autres workers sont hébergés par une page qui a la même origine que la page parente. (Note: Les workers imbriqués ne sont pas encore implémentés dans WebKit).

De plus les workers peuvent utiliser XMLHttpRequest pour les communiquer avec le réseau, à l'exception des attributs responseXML et channel qui vont toujours retourner null.

Toutes les interfaces et toutes les fonctions ne seront pas disponibles pour le script associé au Worker.

Note : Dans Firefox, si vous souhaitez utiliser les workers dans une extension et que vous souhaitez avoir accès au js-ctypes, vous devez utiliser le ChromeWorker à la place.

Constructeurs

Worker()

Créer un web worker dédié qui execute le script qui est au bout de l'URL spécifié. Les workers peuvent aussi être créés en utilisant les Blobs.

Propriétés

Il hérite de propriétés de son parent, EventTarget, et implémente les propriétés de AbstractWorker.

Gestionnaires d'événements

AbstractWorker.onerror

Un EventListener qui est appelé quand un ErrorEvent de type error arrive dans le worker. Il est hérité de AbstractWorker.

Worker.onmessage

Un EventListener qui est appelé quand un MessageEvent de type message arrive dans le worker — i.e. quand un message est envoyé au document parent depuis le worker via DedicatedWorkerGlobalScope.postMessage. Le message est stocké dans la propriété data de l'événement.

Worker.onmessageerror

Un gestionnaire d'évènement qui indique le code à appeler quand un message messageerror arrive.

Méthodes

Il hérite de son parent, EventTarget, et implémente les propriétés de AbstractWorker.

Worker.postMessage()

Envoie un message, qui est n'importe quel objets JavaScript vers la clôture du worker.

Worker.terminate()

Termine immédiatement le worker. Ceci n'offre aucune chance au worker de finir son opération en cours, il est simplement arrêté une fois pour toute. Les instances de ServiceWorker ne supportent pas cette méthode.

Évènements

message

Lorsque le worker parent reçoit un message venant du worker. On peut aussi y accéder via la propriété Worker.onmessage.

messageerror

Lorsque le worker reçois un message qu'il ne peut désérialiser. Aussi disponible à travers la propriété Worker.onmessageerror.

rejectionhandled

Levé à chaque fois qu'une Promise est rejeté, avec ou sans gestionnaire pour intercepter l'exception. Aussi disponible à travers le gestionnaire onrejectionhandled.

unhandledrejection

Levé quand une Promise est rejetée sans gestionnaire pour récupérer l'exception. Aussi disponible à travers la propriété onunhandledrejection.

Exemple

L'extrait de code suivant montre la création d'un objet Worker en utilisant le constructeur Worker() et l'utilisation de l'objet:

js
var monWorker = new Worker("worker.js");
var premier = document.querySelector("#numero1");

premier.onchange = function () {
  monWorker.postMessage([premiere.valeur, deuxieme.valeur]);
  console.log("Message envoyé au worker");
};

Pour un exemple complet, voir Exemple basique de worker dédié (exécuter le worker dédié).

Spécifications

Specification
HTML Standard
# dedicated-workers-and-the-worker-interface

Compatibilité des navigateurs

BCD tables only load in the browser

Comportement des erreur Cross-origin sur les worker

Dans les premières versions des spécifications, charger un scripte worker en cross-origin lève une exception SecurityError. Désormais, à la place un évènement error lancé.

Voir aussi