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.

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 EventHandler 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:

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

Spécification Statuts Commentaire
HTML Living Standard
La définition de 'Worker' dans cette spécification.
Standard évolutif

Compatibilité avec les navigateurs

Voici le support des différents type de worker. Voir les pages de chaque worker pour avoir les particularités.

Update compatibility data on GitHub
OrdinateurMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung Internet
WorkerChrome Support complet 4Edge Support complet 12Firefox Support complet 3.5IE Support complet 10Opera Support complet 10.6Safari Support complet 4WebView Android Support complet 4Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 5.1Samsung Internet Android Support complet 1.0
Worker() constructorChrome Support complet 4Edge Support complet 12Firefox Support complet 3.5IE Support complet 10Opera Support complet 10.6Safari Support complet 4WebView Android Support complet 4Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 5.1Samsung Internet Android Support complet 1.0
message eventChrome Support complet 4Edge Support complet 12Firefox Support complet 3.5IE Support complet 10Opera Support complet 10.6Safari Support complet 4WebView Android Support complet 4Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11.5Safari iOS Support complet 5.1Samsung Internet Android Support complet 1.0
messageerror eventChrome Support complet 60Edge Support complet 18Firefox Support complet 57IE ? Opera Support complet 47Safari ? WebView Android Support complet 60Chrome Android Support complet 60Firefox Android Support complet 57Opera Android Support complet 47Safari iOS ? Samsung Internet Android Support complet 8.0
onmessageChrome Support complet 4Edge Support complet 12Firefox Support complet 3.5IE Support complet 10Opera Support complet 10.6Safari Support complet 4WebView Android Support complet 4Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 5.1Samsung Internet Android Support complet 1.0
onmessageerrorChrome Support complet 60Edge Support complet 18Firefox Support complet 57IE Aucun support NonOpera Support complet 47Safari ? WebView Android Support complet 60Chrome Android Support complet 60Firefox Android Support complet 57Opera Android Support complet 44Safari iOS ? Samsung Internet Android Support complet 8.0
postMessageChrome Support complet OuiEdge Support complet 12Firefox Support complet OuiIE Support complet 10
Notes
Support complet 10
Notes
Notes Internet Explorer does not support Transferable objects.
Opera Support complet 47Safari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet OuiOpera Android Support complet 44Safari iOS Support complet OuiSamsung Internet Android Support complet Oui
terminateChrome Support complet 4Edge Support complet 12Firefox Support complet 3.5IE Support complet 10Opera Support complet 10.6Safari Support complet 4WebView Android Support complet 4Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 5.1Samsung Internet Android Support complet 1.0

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Voir les notes d'implémentation.
Voir les notes d'implémentation.

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é. Pour en savoir plus, voir (en) Loading cross-origin worker now fires error event instead of throwing; worker in sandboxed iframe no longer allowed.

Voir aussi