--- title: API Web Workers slug: Web/API/Web_Workers_API tags: - API - DOM translation_of: Web/API/Web_Workers_API ---
Les Web Workers sont un mécanisme grâce auquel les instructions d'un script peuvent être exécutés dans un thread en arrière-plan séparé du thread d'exécution principal d'une application web. Cela a pour avantage qu'un traitement laborieux peut être réalisé dans un thread séparé, permettant au thread principal (généralement l'interface utilisateur) de fonctionner sans blocage ni ralentissement.
Un worker est un objet créé en utilisant un constructeur (e.g. {{domxref("Worker.Worker", "Worker()")}}) qui exécute un fichier JavaScript nommé — ce fichier contient le code que doit exécuter le thread du worker; les workers s'exécutent dans un autre contexte global qui est différent du contexte actuel {{domxref("window")}}. Ce contexte est représenté par un objet {{domxref("DedicatedWorkerGlobalScope")}} dans le cas des workers dédiés (workers standards utilisés par un script unique; les workers partagés utilisent {{domxref("SharedWorkerGlobalScope")}}).
Vous pouvez exécuter quelque code que ce soit à l'intérieur du thread du worker, avec quelques exceptions cependant. Par exemple, vous ne pouvez pas directement manipuler le DOM à partir d'un worker, ou utiliser des méthodes et des propriétés par défaut de l'objet {{domxref("window")}}. Mais vous pouvez utiliser un grand nombre des éléments disponibles sous window
, comprenant les WebSockets, et les mécanismes de stockage de données tels qu'IndexedDB et l'API Data Store spécifique à Firefox OS. Consultez Les fonctions et classes accessibles aux workers pour plus de détails.
Les données sont envoyées entre les workers et le thread principal au moyen d'un sytème de messages — des deux côtés les messages sont envoyés en utilisant la méthode postMessage()
, et la réponse leur parvient au moyen du gestionnaire d'événement onmessage
(le message est contenu dans l'attribut data
de l'événement {{event("Message")}}.) Les données sont copiées plutôt que partagées.
Les workers peuvent à leur tour engendrer de nouveaux workers, aussi longtemps que ces workers partagent la même origine que la page parente. De plus, les workers peuvent utiliser XMLHttpRequest
pour les E/S réseau, à l'exception que les attributs responseXML
et channel
de XMLHttpRequest
retournent toujours null
.
En plus des workers dédiés, il y a d'autres types de worker :
Note : Selon les Spécifications de Web Worker, les erreurs dans les workers ne devraient pas déborder (voir {{bug(1188141)}}). Cela a été implémenté dans Firefox 42.
Nous avons créé deux simples démos pour illustrer des usages basiques :
Vous pouvez obtenir plus d'informations sur le fonctionnement de ces démos dans notre guide d'utilisation des web workers.
Spécification | Statut | Commentaire |
---|---|---|
{{SpecName("HTML WHATWG", "workers.html#workers", "Web Workers")}} | {{Spec2("HTML WHATWG")}} | Définition initiale. |