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-RenderingsetInterval
setImmediate
- Mikrotasks
: , ,
process.nextTick
Promises
Object.
MutationObserver
Da stellt sich die Frage: Wer sollte es zuerst ausführen?
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
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!

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.

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.

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 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

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.

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.

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.

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.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

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
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

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.
