HTML5 Web Workers
Un web worker est du JavaScript s'exécutant en arrière-plan, sans affecter les performances de la page.
Qu'est-ce qu'un Web Worker ?
Lorsqu'un script s'exécute dans une page HTML, la page ne répond pas tant que le script n'est pas terminé.
Un web worker est du JavaScript s'exécutant en arrière-plan, indépendamment des autres scripts, sans affecter les performances de la page. Vous pouvez continuer à faire ce que vous voulez : cliquer, sélectionner du contenu, etc., pendant que le web worker s'exécute en arrière-plan.
Prise en charge des navigateurs
![]()
![]()
![]()
![]()
![]()
Internet Explorer 10, Firefox, Chrome, Safari et Opera prennent tous en charge les Web Workers.
Exemple de Web Workers HTML5
L'exemple suivant crée un Web Worker simple qui compte en arrière-plan :
Code du fichier demo_workers.js
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
Vérifier si le navigateur prend en charge les Web Workers
Avant de créer un web worker, vérifiez si le navigateur de l'utilisateur le prend en charge :
if(typeof(Worker)!=="undefined")
{
// 是的! Web worker 支持!
// 一些代码.....
}
else
{
//抱歉! Web Worker 不支持
}
Créer un fichier web worker
Maintenant, créons notre web worker dans un JavaScript externe.
Ici, nous créons un script de comptage. Le script est stocké dans le fichier "demo_workers.js" :
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
La partie importante du code ci-dessus est la méthode postMessage() - elle est utilisée pour renvoyer un message à la page HTML.
Remarque :Les web workers ne sont généralement pas utilisés pour des scripts aussi simples, mais pour des tâches plus gourmandes en CPU.
Créer un objet Web Worker
Nous avons déjà le fichier web worker, et maintenant nous devons l'appeler depuis une page HTML.
Le code suivant détecte si le worker existe ; si ce n'est pas le cas, il crée un nouvel objet web worker et exécute le code dans "demo_workers.js" :
if(typeof(w)=="undefined")
{
w=new Worker("demo_workers.js");
}
Ensuite, nous pouvons envoyer et recevoir des messages depuis le web worker.
Ajouter un écouteur d'événement "onmessage" au web worker :
w.onmessage=function(event){
document.getElementById("result").innerHTML=event.data;
};
Arrêter un Web Worker
Lorsque nous créons un objet Web Worker, il continue d'écouter les messages (même après la fin du script externe) jusqu'à ce qu'il soit terminé.
Pour terminer un Web Worker et libérer les ressources du navigateur/de l'ordinateur, utilisez la méthode terminate() :
w.terminate();
Exemple complet de code Web Worker
Nous avons déjà vu le code Worker dans le fichier .js. Ci-dessous se trouve le code de la page HTML :
Exemple
Essayez-le vous-même »
Web Workers et DOM
Étant donné que les web workers sont dans des fichiers externes, ils ne peuvent pas accéder aux objets JavaScript suivants :
- objet window
- objet document
- objet parent