Middle
Qu'est-ce que les web workers et à quoi servent-ils?
sobes.tech IA
Réponse de l'IA
Les web workers sont un moyen d'exécuter du code JavaScript dans un thread de fond, séparé du thread principal de l'interface utilisateur du navigateur.
Objectif :
- Effectuer des calculs intensifs en ressources sans bloquer le thread principal, évitant ainsi le gel de l'interface.
- Traiter de grandes volumes de données ou effectuer des opérations longues (par exemple, parsing, compression, requêtes réseau dans certains cas) en arrière-plan.
- Améliorer la performance et la réactivité des applications web.
Types de web workers :
- Dedicated Worker : Associé au script qui l'a créé.
- Shared Worker : Peut être partagé entre plusieurs scripts s'exécutant dans différentes fenêtres ou onglets du même domaine.
- Service Worker : Intercepte les requêtes réseau, gère le cache, fournit un accès hors ligne, supporte les notifications push.
Exemple de création et d'utilisation d'un Dedicated Worker :
// main.js (thread principal)
const worker = new Worker('worker.js');
// Envoyer un message au worker
worker.postMessage('Démarrer des calculs lourds');
// Recevoir un message du worker
worker.onmessage = function(event) {
console.log('Reçu du worker :', event.data);
};
// worker.js (code du worker)
self.onmessage = function(event) {
console.log('Reçu dans le worker :', event.data);
// Simulation de calculs lourds
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Envoyer un message de retour au thread principal
self.postMessage('Calculs terminés, résultat : ' + result);
};
Limitations :
- Pas d'accès direct au DOM.
- Impossible d'utiliser certaines variables globales du thread principal (par exemple,
window,document). - La communication se fait via un échange asynchrone de messages (
postMessageetonmessage/addEventListener('message')). - Les données entre threads sont transférées par copie (algorithme de clonage structuré), mais pour de grandes données, on peut utiliser
Transferable Objectspour transférer par référence (perdant l'accès dans le thread d'origine).