


Die Ereignisschleife von Node.js: Die Anleitung eines Entwicklers zu Konzepten & Code
Feb 12, 2025 am 08:36 AMasynchrones Programmieren von Node.js: eingehendes Verst?ndnis von Ereignisschleifen
asynchrones Programmieren ist in jeder Programmiersprache ?u?erst schwierig. Konzepte wie Parallelit?t und Deadlock machen selbst die erfahrensten Ingenieure schwierig. Asynchron ausgeführter Code ist schwer vorherzusagen und schwer zu verfolgen, wenn ein Fehler vorliegt. Dieses Problem ist jedoch unvermeidlich, da das moderne Computing Multi-Core-Prozessoren hat. Jeder CPU-Kern hat eine eigene thermische Grenze, und die Single-Core-Leistungsverbesserung hat einen Engpass erreicht. Dies fordert Entwickler auf, effiziente Code zu schreiben und die Hardware -Ressourcen voll auszunutzen.
JavaScript ist Single-Threaded, aber begrenzt dies die F?higkeit von Node.js, moderne Architekturen auszunutzen? Eine der gr??ten Herausforderungen besteht darin, sich mit der inh?renten Komplexit?t des Multithreading zu befassen. Es ist teuer, einen neuen Thread zu erstellen und Kontextwechsel zwischen Threads zu verwalten. Sowohl das Betriebssystem als auch die Programmierer ben?tigen gro?e Anstrengungen, um eine L?sung zu liefern, die zahlreiche Randf?lle abwickelt. In diesem Artikel wird erkl?rt, wie Node.js dieses Problem durch Ereignisschleifen l?st, verschiedene Aspekte von Node.js Ereignisschleifen untersucht und zeigt, wie er funktioniert. Event Loops sind eines der Killer -Funktionen von Node.js, da es dieses schwierige Problem auf v?llig neue Weise l?st.
Schlüsselpunkte
- node.js Ereignisschleife ist eine einsthread-, nicht blockierende und asynchrone gleichzeitige Schleife, mit der mehrere Aufgaben effizient bearbeitet werden k?nnen, ohne dass jede Aufgabe erledigt wird. Dies erm?glicht es, mehrere Webanforderungen gleichzeitig zu bearbeiten.
- Ereignisschleife ist semi-infinit, was bedeutet, dass sie beenden kann, wenn der Anrufstack oder die Rückrufwarteschlange leer ist. Diese Schleife ist für die Wahl des Betriebssystems verantwortlich, um Rückrufe von eingehenden Verbindungen zu erhalten.
- Ereignisschleife wird in mehreren Phasen ausgeführt Rückrufausführung und End -Iteration.
- node.js verwendet zwei Hauptteile: die V8 JavaScript -Engine und Libuv. Network I/O-, Datei -I/O- und DNS -Abfragen werden über Libuv durchgeführt. Die Anzahl der für diese Aufgaben im Thread -Pool verfügbaren Threads ist begrenzt und kann über die Umgebungsvariable uv_threadpool_size eingestellt werden.
- Am Ende jeder Phase führt die Schleife den Prozess aus. Der Rückruf von SetImmediate () ist Teil der gesamten Ereignisschleife, so dass er nicht sofort ausgeführt wird, wie der Name impliziert. Es wird im Allgemeinen empfohlen, SetImmediate () zu verwenden.
Was ist eine Ereignisschleife?
Ereignisschleife ist eine einsthread-, nicht blockierende und asynchrone gleichzeitige Schleife. Stellen Sie sich für jemanden ohne Informatik -Abschluss eine Webanfrage vor, die Datenbank -Lookups ausführt. Ein einzelner Thread kann jeweils nur eine Operation durchführen. Anstatt darauf zu warten, dass die Datenbank reagiert, wird weiterhin andere Aufgaben in der Warteschlange bearbeitet. In der Ereignisschleife erweitert die Hauptschleife den Anrufstapel und wartet nicht auf den Rückruf. Da die Schleife nicht blockiert wird, k?nnen mehrere Webanforderungen gleichzeitig behandelt werden. Mehrere Anfragen k?nnen gleichzeitig in die Warteschlange gestellt werden, wodurch sie gleichzeitig gleichzeitig sind. Die Schleife wartet nicht auf alle Operationen einer Anfrage, die abgeschlossen ist, sondern wird gem?? der Reihenfolge verarbeitet, in der der Rückruf ohne Blockierung auftritt.
Die Schleife selbst ist semi-infinit, was bedeutet, dass sie die Schleife verlassen kann, wenn der Anrufstack oder die Rückrufwarteschlange leer ist. Der Call -Stack kann als Synchroncode wie Console.log angesehen werden, wobei die Erweiterung vor der Umfrage mehr Arbeiten erweitert wird. Node.js verwendet das zugrunde liegende Libuv, um das Betriebssystem für Rückrufe aus eingehenden Verbindungen zu befragen.
Sie fragen sich vielleicht, warum Ereignisschleifen in einem einzigen Thread ausgeführt werden? Themen sind im Speicher relativ schwerer für die für jede Verbindung erforderlichen Daten. Themen sind Betriebssystemressourcen, die gestartet werden müssen, die nicht auf Tausende aktiver Verbindungen ausgedehnt werden müssen.
Normalerweise kann Multithreading auch die Situation komplizieren. Wenn der Rückruf Daten zurückgibt, muss er den Kontext wieder auf den zu verwendenden Thread zurückschüttern. Der Kontextwechsel zwischen Threads ist langsam, da er den aktuellen Zustand synchronisieren muss, z. B. den Anrufstapel oder die lokalen Variablen. Ereignisschleifen k?nnen Fehler vermeiden, wenn mehrere Threads Ressourcen teilen, da es ein einzelner Thread ist. Einthread-Schleifen reduzieren fadenkante F?lle und erm?glichen eine schnellere Kontextschaltung. Dies ist das wahre Genie hinter der Schleife. Es verwendet effektiv Verbindungen und F?den und h?lt gleichzeitig die Skalierbarkeit bei.
Theorie reicht aus. Sie k?nnen es in Reply tun, wie Sie m?chten, oder den Quellcode herunterladen.
semi-infinite Schleife
Die gr??te Frage, die Ereignisschleifen beantworten muss, ist, ob die Schleife aktiv ist. Wenn ja, bestimmen Sie, wie lange Sie in der Rückrufwarteschlange warten k?nnen. In jeder Iteration erweitert Loop den Anrufstapel und die Umfragen.
Dies ist ein Beispiel für die Blockierung der Hauptschleife:
setTimeout( () => console.log('Hi from the callback queue'), 5000); // 保持循環(huán)活動這么長時間 const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {}
Wenn Sie diesen Code ausführen, beachten Sie, dass die Schleife für zwei Sekunden blockiert ist. Die Schleife bleibt jedoch aktiv, bis der Rückruf nach fünf Sekunden ausgeführt wird. Sobald die Hauptschleife entsperrt ist, bestimmt der Wahlmechanismus, wie lange er auf den Rückruf warten wird. Diese Schleife endet, wenn sich der Anrufstapel erweitert und keine Rückrufe übrig sind.
Callback -Warteschlange
Was passiert nun, wenn ich die Hauptschleife blockiere und dann den Rückruf plane? Sobald die Schleife blockiert ist, fügt sie der Warteschlange nicht mehr Rückrufe hinzu:
const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {} // 這需要 7 秒才能執(zhí)行 setTimeout(() => console.log('Ran callback A'), 5000);
Dieser Zyklus bleibt sieben Sekunden lang aktiv. Ereignisschleifen sind in Bezug auf ihre Einfachheit dumm. Es hat keine M?glichkeit zu wissen, was in Zukunft anstehen k?nnte. In tats?chlichen Systemen werden eingehende Rückrufe in der Warteschlange und Ausführung der Hauptschleife in der Warteschlange und Ausführung. Die Ereignisschleife durchl?uft beim Entblockieren mehrere Stufen nacheinander. Um sich in einem Interview über Loops abzuheben, vermeiden Sie ausgefallene Begriffe wie ?Event Launcher“ oder ?Reaktormodus“. Es ist eine einfache eink?pfige Schleife, gleichzeitig und nicht blockierend. Ereignisschleife mit Async/Await
Um zu vermeiden, die Hauptschleife zu blockieren, ist eine Idee, die synchrone E/A mit Async/Warte:
zu wickeln:
const fs = require('fs'); const readFileSync = async (path) => await fs.readFileSync(path); readFileSync('readme.md').then((data) => console.log(data)); console.log('The event loop continues without blocking...');Alles, was nach dem Warten erscheint, stammt aus der Rückrufwarteschlange. Der Code sieht aus wie ein synchroner Blockierungscode, blockiert aber nicht. Beachten Sie, dass Async/Auseait ReadFilesync a
dann , das es aus der Hauptschleife entfernt, macht. Alles, was nach dem Warten erscheint, kann durch einen Rückruf als nicht blockierender Operation betrachtet werden.
Vollst?ndige Offenlegung: Der obige Code dient nur für Demonstrationszwecke. Im tats?chlichen Code empfehle ich die Verwendung von FS. ReadFile, was einen Rückruf ausl?st, der um das Versprechen eingewickelt werden kann. Die Gesamtabsicht bleibt gültig, da dies die E/A -Entfernung aus der Hauptschleife blockiert.gehen Sie noch einen Schritt weiter
Was ist, wenn ich Ihnen gesagt habe, dass Ereignisschleifen nicht nur Stapel und Rückrufwarteschlangen aufrufen? Was ist, wenn eine Ereignisschleife nicht nur eine Schleife, sondern mehrere Schleifen ist? Was w?re, wenn es unten mehrere Threads haben k?nnte?
Jetzt m?chte ich Sie tiefer in node.js.
Ereignisschleife Stufe
Dies sind die Ereignisschleifphasen:
Bildquelle: Libuv -Dokument
- Timestamp aktualisieren. Die Ereignisschleife schneidet die aktuelle Zeit zu Beginn der Schleife aus, um h?ufige zeitbezogene Systemaufrufe zu vermeiden. Diese Systemaufrufe sind interne Anrufe nach Libuv.
- Ist die Schleife aktiv? Wenn die Schleife über einen aktiven Griff, eine aktive Anfrage oder einen geschlossenen Griff verfügt, ist er aktiv. Wie gezeigt, h?lt der anh?ngige Rückruf in der Warteschlange die Schleife aktiv.
- Ausführen von Ablauf -Timer. Hier wird der SetTimeout- oder SetInterval -Rückruf ausgeführt. Schleifen zum überprüfen von zwischengespeicherten nun , um abgelaufene aktive Rückrufe zum Ausführen zu erm?glichen.
- Führen Sie anh?ngige Rückrufe in der Warteschlange aus. Wenn Rückrufe durch frühere Iterationen verz?gert wurden, werden diese Rückrufe zu diesem Zeitpunkt ausgeführt. Die Umfragen werden normalerweise den E/A -Rückruf sofort mit Ausnahmen ausführen. Dieser Schritt behandelt alle zurückgebliebenen Rückrufe aus der letzten Iteration.
- Durchführen von Leerlaufhandlern - ma?geblich wegen unsachgem??er Benennung, weil diese Handler in jeder Iteration laufen und interne Handler für Libuv sind.
- Bereiten Sie sich darauf vor, den Handle auf den SetMediate -Rückruf in der Schleifen -Iteration auszuführen. Diese Griffe laufen vor den Schleifenbl?cken E/O und bereiten eine Warteschlange für diesen Rückruftyp vor.
- Zeitüberschreitungsfrist berechnen. Die Schleife muss wissen, wann sie i/o blockiert. So berechnet es das Timeout:
- Wenn die Schleife im Begriff steht, ist die Zeitüberschreitung 0.
- Wenn es keinen aktiven Handle oder keine aktive Anfrage gibt, betr?gt das Timeout 0.
- Wenn es freie Griffe gibt, betr?gt die Zeitüberschreitung 0.
- Wenn in der Warteschlange anh?ngige Griffe vorhanden sind, betr?gt die Zeitüberschreitung 0.
- Wenn es irgendwelche Griffe gibt, die geschlossen werden, betr?gt die Zeitüberschreitung 0.
- Wenn keines der oben genannten ist, ist das Timeout auf den n?chstgelegenen Timer eingestellt, und wenn es keine aktiven Timer gibt, ist es unendlich .
- Fahren Sie die Dauer der vorherigen Bühnenbl?cke i/o. I/O-bezogene Rückrufe in der Warteschlange werden hier ausgeführt.
- Führen Sie den Rückruf des Handels aus. In dieser Phase ist die Stufe des SetImmediat -Laufens, der entsprechenden Phase für die Vorbereitung des Griffs. Jede SetImmediate -Rückruf in der I/A -Rückrufausführung wird hier ausgeführt.
- Führen Sie den geschlossenen Rückruf aus. Dies sind die aktiven Griffe, die aus der geschlossenen Verbindung freigesetzt werden.
- Iteration endet.
Sie fragen sich vielleicht, warum die Wahlblockierung von I/O blockiert, wenn es nicht blockiert werden soll. Die Schleife blockiert nur, wenn in der Warteschlange keine anh?ngigen Rückrufe vorhanden sind und der Anrufstapel leer ist. In node.js kann der n?chstgelegene Timer beispielsweise über SetTimeout festgelegt werden. Wenn die Schleife auf unendlich eingestellt ist, wartet er darauf, dass eingehende Verbindungen mehr Arbeit leisten. Dies ist eine halbinfinite Schleife, da die Umfrage die Schleife aktiviert, wenn keine verbleibende Arbeit und eine aktive Verbindung besteht.
Folgendes ist die UNIX -Version dieser Timeout -Berechnung in seinem gesamten C -Codeformular:
setTimeout( () => console.log('Hi from the callback queue'), 5000); // 保持循環(huán)活動這么長時間 const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {}
Sie sind mit C vielleicht nicht sehr vertraut, aber dies liest sich wie Englisch und tut genau wie in Phase 7 beschrieben.
phasenweise Demonstration
, um jede Stufe mit reinem JavaScript anzuzeigen:
const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {} // 這需要 7 秒才能執(zhí)行 setTimeout(() => console.log('Ran callback A'), 5000);
Da die Datei -E/A -Rückruf vor Stufe 4 und 9 ausgeführt wird, wird erwartet, dass SetImmediate () zuerst feuert:
const fs = require('fs'); const readFileSync = async (path) => await fs.readFileSync(path); readFileSync('readme.md').then((data) => console.log(data)); console.log('The event loop continues without blocking...');
Netzwerk -E/A ohne DNS -Abfragen ist günstiger als die Datei -E/A, da es in der Hauptereignisschleife ausgeführt wird. Die Datei -E/A wird über den Thread -Pool in der Warteschlange gestellt. DNS -Abfragen verwenden auch Threadpools. Dadurch wird das Netzwerk -E/A so teuer wie die Datei E/A.
Thread Pool
node.js hat zwei Hauptteile: die V8 JavaScript -Engine und Libuv. Datei E/O, DNS -Abfrage und Netzwerk -E/A werden über Libuv durchgeführt.
Dies ist die Gesamtstruktur:
Bildquelle: Libuv -Dokument
Für die Network I/A, Event Loops -Umfrage innerhalb des Haupt -Threads. Dieser Thread ist nicht mit Thread-Sicherheit, da er keine Kontextschalter mit einem anderen Thread hat. Die Abfragen von Datei-E/A und DNS sind plattformspezifisch. Daher besteht die Methode darin, sie in einem Thread-Pool auszuführen. Eine Idee besteht darin, DNS -Abfragen selbst durchzuführen, um das Eingeben des Thread -Pools zu vermeiden, wie im obigen Code gezeigt. Wenn Sie beispielsweise eine IP -Adresse anstelle von Localhost eingeben, wird die Suche aus dem Pool entfernt. Die Anzahl der im Thread -Pool verfügbaren Threads ist begrenzt und kann über die Umgebungsvariable uv_threadpool_size eingestellt werden. Die Standard -Thread -Poolgr??e betr?gt ungef?hr vier.
v8 wird in einer separaten Schleife ausgeführt, l?scht den Anrufstapel und gibt die Kontrolle über die Ereignisschleife zurück. V8 kann mehrere F?den für die Müllsammlung au?erhalb seiner eigenen Schleife verwenden. Stellen Sie sich V8 als Engine vor, der das ursprüngliche JavaScript nimmt und es auf der Hardware ausführt.
Für gew?hnliche Programmierer bleibt JavaScript ein Single-Threaden, da keine Fadensicherheitsprobleme vorliegen. V8 und Libuv starten intern ihre eigenen Threads, um ihre eigenen Bedürfnisse zu erfüllen.
Wenn es ein Durchsatzproblem in node.js gibt, beginnen Sie mit der Hauptveranstaltung. überprüfen Sie, wie lange es dauert, bis eine Bewerbung eine einzige Iteration abgeschlossen hat. Es sollte nicht hundert Millisekunden überschreiten. überprüfen Sie dann den Thread -Pool -Hunger und das, was aus dem Pool vertrieben werden kann. Die Poolgr??e kann auch durch Umgebungsvariablen erh?ht werden. Der letzte Schritt besteht darin, das Mikrobenchmarking von JavaScript -Code in synchron ausgeführter V8 durchzuführen.
Zusammenfassung
Die Ereignisschleife iteriert weiterhin über jede Phase, da der Rückruf in der Warteschlange ist. In jeder Phase gibt es jedoch M?glichkeiten, eine andere Art von Rückruf zu stapfen.
process.nextTick () und setimmediate ()
Am Ende jeder Phase wird der Prozess. Beachten Sie, dass dieser Rückruftyp nicht Teil der Ereignisschleife ist, da er am Ende jeder Stufe ausgeführt wird. Der Rückruf von SetImmediate () ist Teil der gesamten Ereignisschleife, so dass er nicht sofort ausgeführt wird, wie der Name impliziert. Da Process.NextTick () das Verst?ndnis des internen Mechanismus von Ereignisschleifen erfordert, empfehle ich normalerweise die Verwendung von Setimmediate ().
Mehrere Gründe, warum Sie m?glicherweise einen Prozess ben?tigen.NextTick ():
- Zulassen Sie das Netzwerk -E/A -Abschluss, Fehler zu behandeln, aufzur?umen oder Anfragen wiederholen, bevor die Schleife fortgesetzt wird.
- Es kann erforderlich sein, den Rückruf nach der Erweiterung des Anrufstacks auszuführen, aber bevor die Schleife fortgesetzt wird.
beispielsweise m?chte ein Ereignissender ein Ereignis in seinem eigenen Konstruktor ausl?sen. Der Anrufstack muss erweitert werden, bevor das Ereignis aufgerufen werden kann.
setTimeout( () => console.log('Hi from the callback queue'), 5000); // 保持循環(huán)活動這么長時間 const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {}
Erlauben der Call -Stack -Erweiterung verhindert Fehler wie RangeEror: Maximale Call -Stapelgr??e überschritten. Eine Sache zu beachten ist sicherzustellen, dass process.nextTick () die Ereignisschleife nicht blockiert. Rekursive Rückrufanrufe in derselben Phase k?nnen zu Blockierungsproblemen führen.
Schlussfolgerung
Ereignisschleife verk?rpert die Einfachheit in seiner endgültigen Komplexit?t. Es l?st ein schwieriges Problem wie Asynchronizit?t, Fadensicherheit und Parallelit?t. Es entfernt nutzlose oder unerwünschte Teile und maximiert den Durchsatz auf effizienteste Weise. Daher k?nnen NODE.JS -Programmierer die Zeit verkürzen, um asynchrone Fehler zu verfolgen und mehr Zeit für die Bereitstellung neuer Funktionen zu verbringen.
FAQs über Node.js Event Loops
Was ist node.js Ereignisschleife? Die Ereignisschleife von Node.js ist der Kernmechanismus, mit dem Node.js nicht blockierende asynchrone Operationen ausführen kann. Es ist verantwortlich für die Behandlung von E/A-Operationen, Timern und Rückrufen in einer einsthread-ereignisorientierten Umgebung.
Wie funktioniert die Knotenereignisschleife? Die Ereignisschleife prüft kontinuierlich auf Ereignisse oder Rückrufe in der Ereigniswarteschlange und führt sie in der Reihenfolge der Addition aus. Es l?uft in einer Schleife und bearbeitet Ereignisse basierend auf der Verfügbarkeit von Ereignissen, was eine asynchrone Programmierung in node.js erm?glicht.
Welche Rolle spielen Ereignisschleifen in Node.js -Anwendungen? Ereignisschleifen stehen im Mittelpunkt von Node.js, was sicherstellt, dass Anwendungen reaktionsschnell bleiben und viele gleichzeitige Verbindungen ohne mehrere F?den verarbeiten k?nnen.
Was sind die Stufen der Ereignisschleife von Node.js? Die Ereignisschleife in node.js verfügt über mehrere Phasen, darunter Timer, ausstehende Rückrufe, Leerlauf, Umfragen, überprüfungen und Schlie?en. Diese Phasen bestimmen, wie und bestellen die Ereignisse verarbeitet.
Was sind die h?ufigsten Ereignisstypen, die von Ereignisschleifen verarbeitet werden? Zu den allgemeinen Ereignissen geh?ren E/A -Operationen (z. B. das Lesen einer Datei oder die Ausgabe einer Netzwerkanforderung), Timer (z. B. SetTimeout und SetInterval) und Callback -Funktionen (z.
Knoten Wie geht es mit langj?hrigen Operationen in Event-Schleifen um? Langzeit-CPU-intensive Operationen k?nnen die Ereignisschleife blockieren und sollten unter Verwendung von Modulen wie Child_Process oder Worker_Threads-Module in untergeordnete Prozesse oder Arbeiter-Threads ausgeladen werden.
Was ist der Unterschied zwischen einem Anrufstapel und einer Ereignisschleife? Der Anrufstack ist eine Datenstruktur, die Funktionsaufrufe im aktuellen Ausführungskontext verfolgt, w?hrend die Ereignisschleife für die Verwaltung asynchroner und nicht blockierender Vorg?nge verantwortlich ist. Sie arbeiten zusammen, weil die Event -Schleife die Ausführung von Callbacks und E/A -Operationen plant und sie dann zum Anrufstapel schieben.
Was ist die "H?kchen" in der Ereignisschleife? "Tick" bezieht sich auf eine einzige Iteration der Ereignisschleife. In jedem Tick prüft die Event Loop über ausstehende Ereignisse und führt alle zum Ausführen bereitgestellten Rückrufe aus. Ticks ist die grundlegende Arbeitseinheit in einer Node.js -Anwendung.
Das obige ist der detaillierte Inhalt vonDie Ereignisschleife von Node.js: Die Anleitung eines Entwicklers zu Konzepten & Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

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

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

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

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Es gibt drei g?ngige M?glichkeiten, HTTP-Anforderungen in Node.js zu initiieren: Verwenden Sie integrierte Module, Axios und Knotenfetch. 1. Verwenden Sie das integrierte HTTP/HTTPS-Modul ohne Abh?ngigkeiten, das für grundlegende Szenarien geeignet ist, jedoch eine manuelle Verarbeitung von Datengen?hten und Fehlerüberwachung erfordert, z. 2.Axios ist eine auf Versprechen basierende Bibliothek von Drittanbietern. Es verfügt über eine kurze Syntax und leistungsstarke Funktionen, unterstützt Async/Auseait, automatische JSON -Konvertierung, Interceptor usw. Es wird empfohlen, asynchrone Anforderungsvorg?nge zu vereinfachen. 3.Node-Fetch bietet einen Stil ?hnlich dem Browser-Abruf, basierend auf Versprechen und einfacher Syntax

JavaScript -Datentypen sind in primitive Typen und Referenztypen unterteilt. Zu den primitiven Typen geh?ren String, Anzahl, Boolesche, Null, undefiniertes und Symbol. Die Werte sind unver?nderlich und Kopien werden bei der Zuweisung von Werten kopiert, sodass sie sich nicht gegenseitig beeinflussen. Referenztypen wie Objekte, Arrays und Funktionen speichern Speicheradressen, und Variablen, die auf dasselbe Objekt zeigen, wirkt sich gegenseitig aus. Typeof und Instanz k?nnen verwendet werden, um die Typen zu bestimmen, aber auf die historischen Probleme der TypeOfnull zu achten. Das Verst?ndnis dieser beiden Arten von Unterschieden kann dazu beitragen, einen stabileren und zuverl?ssigeren Code zu schreiben.

Hallo, JavaScript -Entwickler! Willkommen in den JavaScript -Nachrichten dieser Woche! Diese Woche konzentrieren wir uns auf: Oracas Markenstreit mit Deno, neue JavaScript -Zeitobjekte werden von Browsern, Google Chrome -Updates und einigen leistungsstarken Entwickler -Tools unterstützt. Fangen wir an! Der Markenstreit von Oracle mit dem Versuch von Deno Oracle, ein "JavaScript" -Marke zu registrieren, hat Kontroversen verursacht. Ryan Dahl, der Sch?pfer von Node.js und Deno, hat eine Petition zur Absage der Marke eingereicht, und er glaubt, dass JavaScript ein offener Standard ist und nicht von Oracle verwendet werden sollte

Versprechen ist der Kernmechanismus für den Umgang mit asynchronen Operationen in JavaScript. Das Verst?ndnis von Kettenanrufen, Fehlerbehebung und Kombination ist der Schlüssel zum Beherrschen ihrer Anwendungen. 1. Der Kettenaufruf gibt ein neues Versprechen durch .then () zurück, um asynchrone Prozessverkampferung zu realisieren. Jeder. Dann () erh?lt das vorherige Ergebnis und kann einen Wert oder ein Versprechen zurückgeben; 2. Die Fehlerbehandlung sollte .Catch () verwenden, um Ausnahmen zu fangen, um stille Ausf?lle zu vermeiden, und den Standardwert im Fang zurückgeben, um den Prozess fortzusetzen. 3. Combinatoren wie Promise.All () (erfolgreich erfolgreich erfolgreich nach allen Erfolg), Versprechen.Race () (Die erste Fertigstellung wird zurückgegeben) und Versprechen.Allsettled () (Warten auf alle Fertigstellungen)

Cacheapi ist ein Tool, das der Browser zur Cache -Netzwerkanfragen bereitstellt, das h?ufig in Verbindung mit dem Servicearbeiter verwendet wird, um die Leistung der Website und die Offline -Erfahrung zu verbessern. 1. Es erm?glicht Entwicklern, Ressourcen wie Skripte, Stilbl?tter, Bilder usw. Zu speichern; 2. Es kann die Cache -Antworten entsprechend den Anfragen übereinstimmen. 3. Es unterstützt das L?schen bestimmter Caches oder das L?schen des gesamten Cache. 4.. Es kann Cache -Priorit?ts- oder Netzwerkpriorit?tsstrategien durch Servicearbeiter implementieren, die sich auf Fetch -Ereignisse anh?ren. 5. Es wird h?ufig für die Offline -Unterstützung verwendet, die wiederholte Zugriffsgeschwindigkeit, die Vorspannungs -Schlüsselressourcen und den Inhalt des Hintergrundaktualisierungss beschleunigen. 6. Wenn Sie es verwenden, müssen Sie auf die Cache -Versionskontrolle, Speicherbeschr?nkungen und den Unterschied zum HTTP -Caching -Mechanismus achten.

Die Ereignisschleife von JavaScript verwaltet asynchrone Vorg?nge, indem sie Call -Stapel, Webapis und Task -Warteschlangen koordinieren. 1. Der Anrufstack führt synchronen Code aus, und wenn er auf asynchrone Aufgaben begegnet, wird er zur Verarbeitung an Webapi übergeben. 2. Nachdem das Webapi die Aufgabe im Hintergrund abgeschlossen hat, wird der Rückruf in die entsprechende Warteschlange (Makroaufgabe oder Micro -Aufgabe) eingebaut. 3. Die Ereignisschleife prüft, ob der Anrufstapel leer ist. Wenn es leer ist, wird der Rückruf aus der Warteschlange herausgenommen und zur Ausführung in den Anrufstapel geschoben. V. 5. Das Verst?ndnis der Ereignisschleife hilft zu vermeiden, den Haupt -Thread zu blockieren und die Codeausführungsreihenfolge zu optimieren.

Ereignisblasen verbreiten sich vom Zielelement nach au?en zum Vorfahrknoten aus, w?hrend Ereignisfassungen sich von der ?u?eren Schicht nach innen zum Zielelement ausbreiten. 1. Ereignisblasen: Nach dem Klicken auf das untergeordnete Element l?st das Ereignis den H?rer des übergeordneten Elements nach oben aus. Nach dem Klicken auf die Schaltfl?che gibt es beispielsweise zuerst die untergeordnete und dann entzündete Eltern aus. 2. Ereigniserfassung: Stellen Sie den dritten Parameter auf True ein, so dass der H?rer in der Erfassungsstufe ausgeführt wird, z. B. das Ausl?sen des Capture -Listeners des übergeordneten Elements, bevor Sie auf die Schaltfl?che klicken. 3. Praktische Verwendungszwecke umfassen ein einheitliches Management von Ereignissen für Kinderelemente, Vorverarbeitung und Leistungsoptimierung von Abfangen. V.

In JavaScript -Arrays gibt es zus?tzlich zu MAP und Filter andere leistungsstarke und selten verwendete Methoden. 1. Reduzierung kann nicht nur summieren, sondern auch z?hlen, gruppen, flach Arrays ab und bauen neue Strukturen auf. 2. FindingIndex werden verwendet, um einzelne Elemente oder Indizes zu finden. 3. Einige und alles werden verwendet, um festzustellen, ob Bedingungen bestehen oder sich alle treffen. 4. SORT kann sortiert werden, wechselt aber das ursprüngliche Array. 5. Achten Sie darauf, das Array zu kopieren, wenn Sie es verwenden, um Nebenwirkungen zu vermeiden. Diese Methoden machen den Code pr?gnanter und effizienter.
