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
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 unErrorEvent
de typeerror
arrive dans le worker. Il est hérité deAbstractWorker
. Worker.onmessage
-
Un
EventListener
qui est appelé quand unMessageEvent
de typemessage
arrive dans le worker — i.e. quand un message est envoyé au document parent depuis le worker viaDedicatedWorkerGlobalScope.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 gestionnaireonrejectionhandled
. 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
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
- Utiliser les web Worker
- Fonctions et classes disponibles dans les Web Workers
- D'autres type de workers:
SharedWorker
, et ServiceWorker. - Worker non-standard, spécifique à Gecko:
ChromeWorker
, utilisé par les extensions.