Vorwort
In meinem Bild erschien asynchron zuerst mit Ajax. Ich arbeitete damals noch an .net, und dann kam .net tatsächlich mit einem asynchronen Steuerelement heraus ...
Obwohl ich schließlich herausgefunden habe, dass es nicht asynchron ist ... Dann wird das Frontend häufig asynchron verwendet. Wenn es sich nicht um ein asynchrones Programm handelt, wäre es Ihnen peinlich zu sagen, dass die von Ihnen geschriebenen NodeJs erstellt wurden durch JavaScript.
Die Funktion des asynchronen Programmiermodells hat auch viele Vorteile, aber es ist ein Albtraum für das Design. Asynchrones wird das Timing stören, sodass es die Schwierigkeit des Designs erhöht
Aber die Asynchronität hat die Leistungsverbesserung und das Benutzererlebnis revolutioniert, daher sind die asynchronen Funktionen von NodeJS ziemlich offensichtlich. Heute werden wir es kurz lernen
Asynchrone E/A
Tatsächlich gibt es auf Betriebssystemebene nur zwei E/A-Methoden: blockierend und nicht blockierendIm Blockierungsmodell muss die Anwendung warten, bis die E/A abgeschlossen ist, bevor sie das Ergebnis zurückgibt. Ihre Besonderheit besteht darin, dass sie das Backend aufruft und darauf wartet, dass das System alle Vorgänge abschließt Warten Sie, während nicht blockierende Anrufe sofort zurückgegeben werden
Ich habe zum ersten Mal ein Buch gelesen, aber ich habe das Gefühl, dass die Beschreibung hier nicht klar ist und das asynchrone Modell tatsächlich sehr groß ist, nur eine Verbesserung der Wahrnehmungsebene
Ich habe jetzt zwei Einzelseiten-Anwendungsansichten, eine Suchseite und eine Listenseite. Wenn ich verschiedene Kanäle durchsuchen muss, muss der Drittanbieter Daten von bestimmten Kanälen abrufen
Natürlich ist es zu diesem Zeitpunkt sehr langsam, wenn ich direkt von A nach B wechsle und dann eine Ladebox oder etwas anderes erstelle, um Daten in B zu laden. Aber das Problem ist jetzt, dass ich eine Animation benötige Effekte, um von A nach B zu wechseln
Dies setzt voraus, dass das Bview-Rendering beim Umschalten beendet ist. Zumindest werden dabei keine Daten abgerufen und das Rendern gestartet. Daher ist die asynchrone Verwendung zu diesem Zeitpunkt möglicherweise nicht so einfach. Selbst wenn Daten asynchron angefordert werden, ist dies ebenfalls erforderlich Datenerfassung zum Laden der Seite
Dies blockiert immer noch das Laden, und aus geschäftlicher Sicht gibt es keine Möglichkeit, dies zu tun
Keine Technologie ist perfekt. Das Nichtblockieren führt nicht nur zu einer Unterbrechung der Logik, sondern erfordert möglicherweise auch eine Abfrage, um zu bestätigen, ob der Ladevorgang abgeschlossen ist (ich habe die Abfrage einmal verwendet, um festzustellen, ob ein DOM generiert wurde).
NodeJs verwendet einen Ereignisschleifenmechanismus. Bei jeder Ausführung des Schleifenkörpers wird bei jedem Tick überprüft, ob ein Ereignis erforderlich ist verarbeitet werden
Wenn ja, nehmen Sie das entsprechende Ereignis heraus, führen Sie es aus und geben Sie dann die nächste Logik ein. Wenn nicht, verlassen Sie die Schleife
In jedem Tick-Prozess gibt es einen oder mehrere Beobachter in jeder Ereignisschleife. Der Prozess zur Bestimmung, ob ein Ereignis verarbeitet werden muss, besteht darin, diese Beobachter zu fragen, ob das Ereignis verarbeitet werden muss
Nehmen Sie unser HTML-Event-Modell als Beispiel
Bei HTML ist jedes seiner DOMs ein Beobachter. Nachdem wir einen addEventListener für ein DOM bereitgestellt haben, registrieren wir eine Rückruffunktion dafür Wir registrieren, werden in ein „Container“-Objekt eingefügt. Zu diesem Zeitpunkt handelt es sich lediglich um eine Registrierung. Diese Funktionen werden ausgelöst, nachdem die Bedingungen erfüllt sind (wenn sich die Seite ändert), und die relevanten Ereignisse werden aus dem Container entnommen ausgeführtWir klicken nun einmal auf einen Punkt auf der Seite, nehmen dann die Klickereignissammlung aus dem Container, suchen das entsprechende DOM und lösen dann die Rückruffunktionen dieser DOM aus
Ereignisse können durch Benutzerklicks oder Datenänderungen entstehen. In Node entstehen Ereignisse hauptsächlich durch Netzwerkanforderungen und Datei-E/A. Diese Ereignisse verfügen über entsprechende Beobachter, z. B. Dateibeobachter und Netzwerkbeobachter
Dies ist auch ein typisches Produktions-/Verbrauchsmodell, asynchrone E/A, Netzwerkanforderungen sorgen für die Ereignisproduktion, Ereignisse werden an verschiedene Beobachter übermittelt, Beobachter registrieren Ereignisse und die Ereignisschleife ist dafür verantwortlich, Ereignisse herauszunehmen und dann auszuführen
PS: Am Beispiel eines Klicks registriert jeder DOM-Beobachter zuerst das Ereignis, der Seitenprozess überwacht die Seite kontinuierlich, der Benutzer klickt auf die Seite, um Ereignisse zu generieren, und dann wird das registrierte Klickereignis aus dem Container entnommen und ausgeführt ,
Allgemeine Funktionslogik wird von uns gesteuert:
fs.open öffnet eine Datei basierend auf dem Pfad und den Parametern, um relevante Daten abzurufen. Es ruft intern die c-bezogene Schnittstelle auf und generiert dabei ein Zwischenobjekt, in dem alle unsere Zustände angezeigt werden...
PS: Ich fühle mich schlecht, nachdem ich es so lange gesehen habe
Fazit
Das Obige dreht sich alles um asynchrone E/A in nodejs. Wenn es Auslassungen oder Fehler gibt, weisen Sie bitte darauf hin.