suchen
HeimWeb-Frontendjs-TutorialErzwungene Sortierung der Javascript-Ereignisschleife

js Single-Threaded

js ist Single-Threaded, was der Benutzerinteraktion und DOM-Operationen förderlicher ist. Für eine detaillierte Erklärung von Prozessen und Threads können Sie auf das Portal klicken Multithreading ist im Wesentlichen auch Single-Threading. Die vom Webworker erstellten Threads werden vom Hauptthread gesteuert und können nur Berechnungen durchführen

js-Synchronisation und asynchrone

Synchrone Ausführung: Das heißt, der js-Hauptthread führt Aufgaben nacheinander aus. Wenn Sie WebAPI/Ajax und andere Codes ausführen, warten Sie auf die Antwort und der nachfolgende Code wird nicht ausgeführt. Das heißt, die nächste Aufgabe muss warten, bis die vorherige Aufgabe ausgeführt wird abgeschlossen;

Asynchrone Ausführung: js ist Single-Threaded und kann nicht ausgeführt werden, aber der Browser kann, wenn js ausgeführt wird, auf webAPI stoßen Der Wert wird sofort zurückgegeben, um den Hauptthread nicht zu blockieren. Der eigentliche asynchrone Vorgang wird vom Browser ausgeführt und nach Abschluss besprochen. Die Rückruffunktion wird in die Nachrichtenwarteschlange des js-Hauptthreads verschoben wartet auf den Aufruf des Hauptthreads;

Ereignisschleifenmechanismus [Ereignisschleife]

Wenn js ausgeführt wird, verfügt sein Hauptthread über einen Ausführungsstapel [persönliche Gewohnheit wird als Aufrufstapel bezeichnet] (Stack ) und eine Nachrichtenwarteschlange [auch Aufgabenwarteschlange oder Ereigniswarteschlange genannt] (Ereigniswarteschlange); wenn js während der Ausführung auf eine Funktion stößt, wird diese auf den Stapel verschoben und nach Ausführung der Funktion aus dem Stapel und aus der Hauptwarteschlange entfernt Thread-Aufrufe Führen Sie den Stapel aus und führen Sie ihn aus. Wenn sich keine Aufgabe im Ausführungsstapel befindet, fragt der Hauptthread die Nachrichtenwarteschlange ab Zur Ausführung in den Stapel geschoben, bis der Ausführungsstapel leer ist und die Nachricht erneut abgefragt wird, um eine Schleife zu bilden, ist dies die berühmte Ereignisschleife [Ereignisschleife], da die asynchrone Ausführung vom Browser abgeschlossen wird Um zu verstehen, warum DOM-Ereignisse nach der Wiederherstellung des Threads nacheinander ausgeführt werden, wenn der JS-Thread blockiert ist, wird die Aufgabenwarteschlange vom Browser verschoben und der JS-Thread wird blockiert == Der Browser-Thread ist blockiert! Mit anderen Worten, selbst wenn der Hauptthread blockiert ist, wird die Aufgabe nicht daran gehindert, in die Aufgabenwarteschlange verschoben zu werden.]

Ein weiterer Code :

      // 主线程执行fn1任务  1function fn1(){ 
                console.log("任务1执行")// 遇到webAPI立即返回 这里是undefined值 并交给浏览器对应线程处理 2  // 浏览器收到后 0 毫秒将回调函数推入消息列队; 异步执行setTimeout(function(){// 查询到一个回调任务 入栈执行    5console.log("回调1执行")// 遇到webAPI立即返回 这里是undefined值 并交给浏览器对应线程处理  6  // 浏览器收到后 500   毫秒将回调函数推入消息列队; 异步执行setTimeout(function(){// 查询到一个回调任务 入栈执行    7console.log("回调2执行")
                    },500)
                },0)
            }// 主线程执行fn2任务 3function fn2(){console.log("任务2执行")}// 执行栈没有可执行任务 开始查询消息列队 4

Makrotasks und Mikrotasks

Nachrichtenwarteschlangen werden in zwei Typen unterteilt, nämlich Makrotasks[Task Queue] und Microtasks[Microtasks Queue]; 🎜>

  • Makrotasks

    : , , setTimeout, I/O, UI-RenderingsetIntervalsetImmediate

  • Mikrotasks

    : , , process.nextTickPromisesObject.MutationObserver

  • Da stellt sich die Frage: Wer sollte es zuerst ausführen?
In der Promise/A+-Spezifikation heißt es:

Hier bedeutet „Plattformcode“ Engine, Umgebung und Promise-Implementierungscode. In der Praxis stellt diese Anforderung sicher, dass onFulfilled und onRejected asynchron ausgeführt werden. nach der Ereignisschleife, in der then aufgerufen wird, und mit einem neuen Stack
Dies kann entweder mit einem „Makrotask“-Mechanismus wie setTimeout oder setImmediate oder mit einem „Mikrotask“-Mechanismus wie „setTimeout“ oder „setImmediate“ implementiert werden MutationObserver oder process.nextTick
Da die Promise-Implementierung als Plattformcode betrachtet wird, kann sie selbst eine Aufgabenplanungswarteschlange oder „Trampolin“ enthalten, in der die Handler aufgerufen werden.In der Tat der Ausführungsprozess ist auch leicht zu verstehen. Basierend auf der vorherigen Abfrage werden bei der Abfrage der Nachrichtenwarteschlange zunächst
Mikrotasks und dann
Makrotasks abgefragt 🎜>Microtasks-Aufgabe beim Ausführen von Makrotasks. Der nächste Schritt besteht darin, zuerst die Microtasks-Warteschlangenaufgabe abzufragen und dann Makrotasks abzufragen wird wiederholt, bis die Nachrichtenwarteschlange [zwei Warteschlangen] keine Aufgaben mehr hat Ok, unser vorheriger Code [die Promise-Funktion ist es6, daher wird die Knotenumgebung verwendet]

Der obige Codeausführungsprozess:

js führt Konsole 1 aus. Wenn setTimeout auftritt, wird es in eine asynchrone Ausführung geändert, und wenn setTimeout erneut auftritt, wird es erneut asynchron ausgeführt. Dann trifft die Ausführung auf a Versprechen und wird zur Ausführung in die Aufgabenwarteschlange vom Typ Mikrotasks verschoben. Zu diesem Zeitpunkt ist der Ausführungsstapel leer und die Nachrichtenwarteschlange wird zunächst abgefragt Aufgabe, die ausgeführt werden kann. Dann wird die Aufgabe zur Ausführung in den Stapel verschoben und entsprechend gedruckt. [Solange gefunden wird, werden Mikroaufgaben ausgeführt, bis sie leer sind ]; Fragen Sie die Nachrichtenwarteschlange erneut ab. Die Mikrotasks-Warteschlange hat dann keine auszuführenden Aufgaben. Suchen Sie dann nach einem setTimeout-Rückruf, der auf die Ausführung wartet und holen Sie es heraus, fragen Sie die Warteschlange erneut ab. Zu diesem Zeitpunkt sind noch keine Aufgaben in der Makrotasks-Warteschlange vorhanden, und Sie finden einen setTimeou-Rückruf, der auf die Ausführung wartet Bei der Ausführung wird festgestellt, dass das Versprechen in die Mikrotasks verschoben wird. Die Warteschlange wird aus dem Stapel entfernt und der Ausführungsstapel ist wieder leer. Fragen Sie die Nachrichtenwarteschlange ab und stellen Sie fest, dass Mikrotasks ausgeführt werden können. Die Druckantwort 8 9 10 ist nun beendet und der Hauptthread befindet sich im Wartezustand >

Das obige ist der detaillierte Inhalt vonErzwungene Sortierung der Javascript-Ereignisschleife. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Python vs. JavaScript: Welche Sprache sollten Sie lernen?Python vs. JavaScript: Welche Sprache sollten Sie lernen?May 03, 2025 am 12:10 AM

Die Auswahl von Python oder JavaScript sollte auf Karriereentwicklung, Lernkurve und Ökosystem beruhen: 1) Karriereentwicklung: Python ist für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet, während JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung geeignet ist. 2) Lernkurve: Die Python -Syntax ist prägnant und für Anfänger geeignet; Die JavaScript -Syntax ist flexibel. 3) Ökosystem: Python hat reichhaltige wissenschaftliche Computerbibliotheken und JavaScript hat ein leistungsstarkes Front-End-Framework.

JavaScript -Frameworks: Stromversorgung moderner WebentwicklungJavaScript -Frameworks: Stromversorgung moderner WebentwicklungMay 02, 2025 am 12:04 AM

Die Kraft des JavaScript -Frameworks liegt in der Vereinfachung der Entwicklung, der Verbesserung der Benutzererfahrung und der Anwendungsleistung. Betrachten Sie bei der Auswahl eines Frameworks: 1. Projektgröße und Komplexität, 2. Teamerfahrung, 3. Ökosystem und Community -Unterstützung.

Die Beziehung zwischen JavaScript, C und BrowsernDie Beziehung zwischen JavaScript, C und BrowsernMay 01, 2025 am 12:06 AM

Einführung Ich weiß, dass Sie es vielleicht seltsam finden. Was genau muss JavaScript, C und Browser tun? Sie scheinen nicht miteinander verbunden zu sein, aber tatsächlich spielen sie eine sehr wichtige Rolle in der modernen Webentwicklung. Heute werden wir die enge Verbindung zwischen diesen drei diskutieren. In diesem Artikel erfahren Sie, wie JavaScript im Browser ausgeführt wird, die Rolle von C in der Browser -Engine und wie sie zusammenarbeiten, um das Rendern und die Interaktion von Webseiten voranzutreiben. Wir alle kennen die Beziehung zwischen JavaScript und Browser. JavaScript ist die Kernsprache der Front-End-Entwicklung. Es läuft direkt im Browser und macht Webseiten lebhaft und interessant. Haben Sie sich jemals gefragt, warum Javascr

Node.js Streams mit TypeScriptNode.js Streams mit TypeScriptApr 30, 2025 am 08:22 AM

Node.js zeichnet sich bei effizienten E/A aus, vor allem bei Streams. Streams verarbeiten Daten inkrementell und vermeiden Speicherüberladung-ideal für große Dateien, Netzwerkaufgaben und Echtzeitanwendungen. Die Kombination von Streams mit der TypeScript -Sicherheit erzeugt eine POWE

Python vs. JavaScript: Leistung und EffizienzüberlegungenPython vs. JavaScript: Leistung und EffizienzüberlegungenApr 30, 2025 am 12:08 AM

Die Unterschiede in der Leistung und der Effizienz zwischen Python und JavaScript spiegeln sich hauptsächlich in: 1 wider: 1) Als interpretierter Sprache läuft Python langsam, weist jedoch eine hohe Entwicklungseffizienz auf und ist für eine schnelle Prototypentwicklung geeignet. 2) JavaScript ist auf einen einzelnen Thread im Browser beschränkt, aber Multi-Threading- und Asynchronen-E/A können verwendet werden, um die Leistung in Node.js zu verbessern, und beide haben Vorteile in tatsächlichen Projekten.

Die Ursprünge von JavaScript: Erforschung seiner ImplementierungsspracheDie Ursprünge von JavaScript: Erforschung seiner ImplementierungsspracheApr 29, 2025 am 12:51 AM

JavaScript stammt aus dem Jahr 1995 und wurde von Brandon Ike erstellt und realisierte die Sprache in C. 1.C-Sprache bietet Programmierfunktionen auf hoher Leistung und Systemebene für JavaScript. 2. Die Speicherverwaltung und die Leistungsoptimierung von JavaScript basieren auf C -Sprache. 3. Die plattformübergreifende Funktion der C-Sprache hilft JavaScript, auf verschiedenen Betriebssystemen effizient zu laufen.

Hinter den Kulissen: Welche Sprache macht JavaScript?Hinter den Kulissen: Welche Sprache macht JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript wird in Browsern und Node.js -Umgebungen ausgeführt und stützt sich auf die JavaScript -Engine, um Code zu analysieren und auszuführen. 1) abstrakter Syntaxbaum (AST) in der Parsenstufe erzeugen; 2) AST in die Kompilierungsphase in Bytecode oder Maschinencode umwandeln; 3) Führen Sie den kompilierten Code in der Ausführungsstufe aus.

Die Zukunft von Python und JavaScript: Trends und VorhersagenDie Zukunft von Python und JavaScript: Trends und VorhersagenApr 27, 2025 am 12:21 AM

Zu den zukünftigen Trends von Python und JavaScript gehören: 1. Python wird seine Position in den Bereichen wissenschaftlicher Computer und KI konsolidieren. JavaScript wird die Entwicklung der Web-Technologie fördern. Beide werden die Anwendungsszenarien in ihren jeweiligen Bereichen weiter erweitern und mehr Durchbrüche in der Leistung erzielen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.