Heim  >  Artikel  >  Web-Frontend  >  NodeJS-Tutorial zum asynchronen I/O_node.js

NodeJS-Tutorial zum asynchronen I/O_node.js

WBOY
WBOYOriginal
2016-05-16 16:30:461449Durchsuche

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 blockierend

Im 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ührt

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

var forEach = Funktion (Liste, Rückruf) {
for (var i = 0, len = list.length; i < len; i ) {
          callback(list[i], i, list);
}
}


Im Falle eines asynchronen Betriebs wird die Rückruffunktion nicht vom Entwickler gesteuert. Bei jedem Aufruf von js wird ein Übergangsproduktanforderungsobjekt generiert

fs.open = Funktion (Pfad, Flags, Modus, Rückruf) {
bingding.open(pathModule._makeLong(path), stringToFlags(flags), mode, callback);
};

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.

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