Mécanisme d'exécution Javascript Avant HTML5, l'exécution de JavaScript dans les navigateurs fonctionnait de manière monothread, bien qu'il existe de nombreuses façons de simuler le multi-threading (par exemple : dans la méthode setinterval Javascript, la méthode setTimeout , etc.), mais en substance, l'exécution du programme est toujours effectuée par le moteur JavaScript de manière planifiée à un seul thread. Le thread de travail introduit dans HTML5 permet au moteur Javascript côté navigateur d'exécuter du code Javascript simultanément, obtenant ainsi une bonne prise en charge de la programmation multithread côté navigateur.
Threads multiples en Javascript - WebWorker
Web Worker en HTML5 peut être divisé en deux types de threads différents, l'un est un thread dédié Dedicated Worker et l'autre est un thread partagé Partagé Travailleur. Les deux types de threads répondent à des objectifs différents.
Travailleur Web dédié Un travailleur dédié est connecté au script qui l'a créé. Il peut communiquer avec d'autres travailleurs ou composants du navigateur, mais il ne peut pas communiquer avec le DOM. La signification de dédié, je pense, est que ce fil ne gère qu'une seule exigence à la fois. Les threads dédiés sont implémentés dans divers navigateurs grand public, à l'exception d'IE, et peuvent être utilisés en toute confiance.
Créer un thread Créer un travailleur est très simple. Il suffit de transmettre le nom du fichier JavaScript qui doit être exécuté dans le thread au constructeur.
Communication par thread Pour communiquer entre le thread principal et le sous-thread, les méthodes postMessage et onmessage de l'objet thread sont utilisées. Peu importe qui envoie des données à qui, l'expéditeur utilise la méthode postMessage et le destinataire utilise la méthode onmessage pour recevoir des données. postMessage n'a qu'un seul paramètre, qui correspond aux données transférées, et onmessage n'a également qu'un seul paramètre. S'il s'agit d'un événement, les données reçues sont obtenues via event.data.
Envoyer des données JSON JSON est quelque chose de pris en charge nativement par JS. Il n'est pas nécessaire de l'utiliser en vain. Utilisez JSON pour transmettre des données complexes. Par exemple :
postMessage({ 'cmd': 'init', 'timestamp': Date.now()});
Gestion des erreurs Lorsqu'une erreur se produit dans un fil, c'est une erreur le rappel d'événement sera appelé. La façon de gérer les erreurs est donc très simple : elle consiste à accrocher l'événement onerror de l'instance de thread. Cette fonction de rappel a un paramètre error, qui comporte 3 champs : message - le nom du fichier d'erreur ; le fichier de script où l'erreur s'est produite ;
Détruisez le fil À l'intérieur du fil, utilisez la méthode close pour se détruire. Dans le thread principal en dehors du thread, utilisez la méthode terminate de l'instance de thread pour détruire le thread.
Regardons le fonctionnement de base des threads à partir d'un exemple :
Code HTML :
content="text/ html; charset=utf-8" />
web worker fibonacci
Code fibonacci.js :
Copier le code
Le code est le suivant :
Mettez-les dans le même répertoire et exécutez la page Fichier, vérifiez la console, vous pouvez voir les résultats de l'opération.
Une dernière chose ici est que dans le fil de discussion principal, l'événement onmessage peut être accroché d'une autre manière :
Copier le code
Le code est le suivant :
worker.addEventListener('message', function(event) {