Javascript-Ausführungsmechanismus Vor HTML5 funktionierte die Ausführung von JavaScript in Browsern in einer Single-Thread-Methode, obwohl es viele Möglichkeiten gibt, Multi-Threading zu simulieren (zum Beispiel: in Javascript setinterval-Methode, setTimeout-Methode). , usw.), aber im Wesentlichen wird die Ausführung des Programms immer noch von der JavaScript-Engine im Rahmen einer Single-Thread-Planung durchgeführt. Der in HTML5 eingeführte Worker-Thread ermöglicht es der browserseitigen Javascript-Engine, gleichzeitig Javascript-Code auszuführen, wodurch eine gute Unterstützung für die browserseitige Multithread-Programmierung erreicht wird.
Mehrere Threads in Javascript – WebWorker
Web Worker in HTML5 kann in zwei verschiedene Thread-Typen unterteilt werden, einer ist ein dedizierter Thread „Dedicated Worker“ und der andere ist ein gemeinsam genutzter Thread „Shared“. Arbeitnehmer. Beide Arten von Threads dienen unterschiedlichen Zwecken.
Dedizierter Web-Worker Ein dedizierter Worker ist mit dem Skript verbunden, das ihn erstellt hat. Er kann mit anderen Workern oder Browserkomponenten kommunizieren, aber nicht mit dem DOM. Die Bedeutung von dediziert ist meiner Meinung nach, dass dieser Thread jeweils nur eine Anforderung behandelt. Dedizierte Threads sind in verschiedenen Mainstream-Browsern außer IE implementiert und können bedenkenlos verwendet werden.
Einen Thread erstellen Das Erstellen eines Workers ist sehr einfach. Übergeben Sie einfach den Dateinamen der JavaScript-Datei, die im Thread ausgeführt werden muss.
Thread-Kommunikation Zur Kommunikation zwischen dem Haupt-Thread und dem Sub-Thread werden die Methoden postMessage und onmessage des Thread-Objekts verwendet. Unabhängig davon, wer Daten an wen sendet, verwendet der Absender die postMessage-Methode und der Empfänger die onmessage-Methode, um Daten zu empfangen. postMessage hat nur einen Parameter, nämlich die übertragenen Daten, und onmessage hat auch nur einen Parameter. Wenn es sich um ein Ereignis handelt, werden die empfangenen Daten über event.data abgerufen.
JSON-Daten senden JSON wird von JS nativ unterstützt. Es ist nicht nötig, JSON umsonst zu verwenden, um komplexe Daten zu übertragen. Zum Beispiel:
postMessage({ 'cmd': 'init', 'timestamp': Date.now()});
Fehlerbehandlung Wenn in einem Thread ein Fehler auftritt, ist dies ein Fehler Der Ereignisrückruf wird ein Anruf sein. Der Umgang mit Fehlern ist also sehr einfach, indem das onerror-Ereignis der Thread-Instanz verknüpft wird. Diese Rückruffunktion verfügt über einen Parameter „error“, der aus drei Feldern besteht: „message“ – die Fehlermeldung; „filename“ – die Skriptdatei, in der der Fehler aufgetreten ist; „line“ – die Zeile, in der der Fehler aufgetreten ist.
Zerstöre den Thread Verwende innerhalb des Threads die Close-Methode, um sich selbst zu zerstören. Verwenden Sie im Hauptthread außerhalb des Threads die Terminate-Methode der Thread-Instanz, um den Thread zu zerstören.
Sehen wir uns die grundlegende Funktionsweise von Threads anhand eines Beispiels an:
HTML-Code:
web worker fibonacci function(){
var worker = new Worker('fibonacci.js');
worker.onmessage = function(event) {
console.log("Result:" event.data); >};
worker.onerror = function(error) {
console.log("Error:"
};
< /script>
Skriptdatei fibonacci.js-Code:
Code kopieren
Der Code lautet wie folgt:
/ /fibonacci.js Eine weitere Sache hier ist, dass im Hauptthread das onmessage-Ereignis auf andere Weise eingehängt werden kann:
Code kopieren
Der Code lautet wie folgt:
worker.addEventListener('message', function(event) {
console.log("Result:" event.data);
}, false );