Heim > Web-Frontend > js-Tutorial > Hauptteil

Node.js-Tutorial für Anfänger (1)

php中世界最好的语言
Freigeben: 2018-03-12 17:17:00
Original
1813 Leute haben es durchsucht

Dieses Mal bringe ich Ihnen ein Anfänger-Tutorial zu Node.js. Was sind die Vorsichtsmaßnahmen für Anfänger-Tutorials zur Verwendung von Node.js?

Hauptzeile: Was ist Node.js--> Eigenschaften von Node.js--> -- > Paket--> Nicht blockierende, ereignisgesteuerte Funktion-->

Was ist ein Knoten? Schauen Sie sich zunächst den Namen Node.js an. Auf den ersten Blick denken einige Leute, dass es sich bei diesem Ding um eine Bibliothek oder ein Framework wie jQuery handelt, aber in Wirklichkeit handelt es sich nicht um eine Plattform, die die Ausführung von JavaScript auf dem Server ermöglicht . oder Node.js ist ein Tool, das die Ausführung von JavaScript in einer Nicht-Browser-Umgebung ermöglicht. Node.js verwendet die sogenannte schnellste Chrome v8-Engine der Welt. Sie besteht aus zwei Teilen, einschließlich Core JavaScript und Node Core JavaScript besteht aus der Standardbibliothek und bezieht sich tatsächlich auf ECMAScript, was bedeutet, dass es nur das ECMAScript in unseren js-Skripten auf der Browserseite enthält, mit Ausnahme unseres Dokumentobjektmodells, das DOM ist, und des Browserobjektmodells, das BOM ist Die Leute denken, dass Node Kompatibilitätsprobleme hat? Es gibt kein Kompatibilitätsproblem mit Node, da wir das js-Skript des Client-Browsers gelernt haben und verstehen sollten, dass sich das js-Kompatibilitätsproblem, über das wir oft sprechen, tatsächlich auf das Kompatibilitätsproblem unseres DOM und BOM bezieht. Was ist also die Node-Standardbibliothek? Dies ähnelt unserer C-Standardbibliothek oder C++-Standarderweiterungsbibliothek. Die Eigenschaft von Node.js ist, dass unser JavaScript in unsere erstklassige Skriptwelt integriert werden kann Schauen Sie sich zunächst das erste Beispiel an, helloworld. Scheint dieses helloworld komplizierter zu sein als andere Sprachen? Aber wir können einen Blick auf die Funktionen werfen, die durch diese 6 Codezeilen implementiert werden. Eine der Säulen von Node.js ist das Modul, also ist das erste, was wir lernen müssen ein Modul? Ein Modul ist eigentlich eine JS-Datei. Wenn wir in unserem Client-Browser eine CSS-Datei einbetten und eine andere CSS-Datei einführen möchten, können wir die @import-Direktive verwenden. Wenn wir jedoch in unserem JS eine andere CSS-Datei einführen möchten, Das bedeutet natürlich nicht, dass wir mit createElement ein Skript-Tag erstellen und es dann an unseren HTML-Code anhängen können, aber egal, was passiert Ja, unser Knoten hat dieses Problem gelöst. In unserem Knoten ist eine js-Datei direkt ein Modul. Wie können wir also eine weitere js-Datei in eine js-Datei einfügen? Wir können es über eine Funktion namens „require“ einführen. Wir können jedes Modul als ein größeres Objekt behandeln. Sie werden schließlich einige Eigenschaften und Methoden verfügbar machen. Wir tun dies über eine Funktion namens „module.exports“, die Attribute und Methoden verfügbar macht Zu den gängigen Kernmodulen gehören das http-Modul, das betriebssystembezogene Modul und das fs-Modul, das Vorgänge im Dateisystem verarbeitet , Util-Modul-Tools, und das andere ist das lokale Modul. Das sogenannte lokale Modul bedeutet, dass wir unser eigenes Modul erstellen können. Eine größere Einheit ist das Paket. Wir können darüber nachdenken, wir können uns ein Modul als eine unserer Dateien vorstellen und wir können uns das Paket als einen Ordner vorstellen, was bedeutet, dass wir einen Ordner verwenden können, um eine Reihe von Dateien mit ähnlichen Funktionen zusammenzustellen und sie zu verpacken. Wenn es um Pakete geht, sind neben den von uns selbst erstellten Paketen auch einige Pakete von Drittanbietern wichtig. Auf der Website npm.org gibt es eine große Anzahl von Paketen von Drittanbietern, die von Dutzenden implementiert wurden Tausende von Menschen wollen es nutzen, wie soll man es konkret nutzen?Um uns die Verwendung von Paketen von Drittanbietern zu erleichtern, hat unser Knoten ein Tool namens Paketverwaltungstool entwickelt. Wir können uns einfach ansehen, wie wir dieses Ding verwenden Installieren Sie es. Eine davon ist die globale Installation, die andere ist möglicherweise nicht genau das Gleiche wie bei anderen Sprachen. Beispielsweise sind global installierte Pakete im Allgemeinen für Befehlszeilenoperationen geeignet Unser Lessc, ein weiteres lokales Paket, wird im Allgemeinen in einigen Projekten verwendet, an denen wir gerade arbeiten. Wenn es nur diese Dinge enthält, hat Node.js natürlich keine großen Funktionen, da diese Dinge tatsächlich bereits in anderen Sprachen verfügbar sind ​Wie Python und Ruby, das größte Merkmal von Node.js sind tatsächlich die asynchronen, nicht blockierenden und ereignisgesteuerten Module, die sich stark von anderen Sprachen unterscheiden Ich hoffe, dass jeder dieses Beispiel verstehen kann, vorausgesetzt, dass wir synchrone E/A implementieren und eine SQL-Anweisung wie Python schreiben möchten Alles in dieser Form, das heißt, zuerst db.query verwenden und dann eine SQL-Abfrage blockieren und darauf warten, dass die Datenbank die Ergebnisse zurückgibt und sie in einer res-Variablen speichert, aber das Folgende ist die tatsächliche Schreibweise, die Node verwendet Es ist ersichtlich, dass diese Anweisung tatsächlich eine solche SQL-Abfrage generiert und eine Funktion als Rückruffunktion einfügt Die Anweisung wird nicht direkt ausgeführt, sondern rückwärts. Wann wird der darin enthaltene Inhalt ausgeführt? Warten Sie, bis meine Datenbank die Nachricht zurückgibt, geben Sie dann die Rückruffunktion über die Ereignisschleife ein und geben Sie dann die Abfrageergebnisse aus. Dies ist der asynchrone E/A-Modus. Anschließend erkläre ich, was Synchronisation und was asynchron ist und was das Programm ausführt IO Der Vorgang kann lange dauern und Hunderttausende oder Hunderte Millionen Befehlszyklen dauern, aber die Ausführung einer JavaScript-Anweisung dauert möglicherweise nur ein paar Hundert oder Tausende von Befehlszyklen. Natürlich kann sie optimiert werden Es dauert möglicherweise nur ein paar Dutzend, daher ist es Zeitverschwendung, wenn das Betriebssystem und die CPU asynchrone Planungsmethoden durch Interrupts implementieren. Dies bedeutet, dass das Betriebssystem hängen bleibt Aktueller Prozess und gibt dann die Kontrolle über die CPU an andere Prozesse weiter. Wenn die E/A abgeschlossen ist, setzt das Betriebssystem die Ausführung fort. Gleichzeitig können Sie auf die Ergebnisse der E/A-Operation zugreifen Die Anforderungsmethode heißt Es ist synchrones IO oder blockierendes IO, aber im IO-Modus in Node verwenden wir asynchrones IO oder nicht blockierendes IO. Dies bedeutet, dass der Prozess, nachdem er eine IO-Anfrage initiiert hat, sofort zurückkehrt und die Ausführung fortsetzt Andere Aufgaben ausführen und dann andere Mittel verwenden, um zu benachrichtigen, dass der E/A-Vorgang abgeschlossen ist, und dann den Logikcode verarbeiten, wenn der nicht blockierende E/A-Vorgang initiiert wird , führt aber weiterhin das Ereignis aus und tritt dann in die Ereignisschleife ein, um andere Ereignisse zu verarbeiten. Das Konzept eines Ereignisses und einer Ereignisschleife wird hier in einem Ereignis abstrahiert Das gesamte Programm ist eine Ereignisschleife, und die Ereignisschleife wird weiterhin eine sogenannte Ereigniswarteschlange verarbeiten. Das heißt, ich habe am Anfang ein Ereignis, und dann können während des Ausführungsprozesses einige Anforderungen initiiert werden, z. B. E/A-Anforderungen Nachdem die E/A-Anforderung abgeschlossen ist, wird die Ereigniswarteschlange vor der Verarbeitung in die Ereigniswarteschlange eingefügt. Dies ist ein Verarbeitungsmodus, der auf der Ereignisschleife basiert Ein sehr klassischer und häufig verwendeter Modus, wie z. B. qt, gtk, ist beispielsweise auch ein Ereignis, und ein Ereignis erfordert eine Rückruffunktion Ereignis eintritt. Warum verwendet Node dann dieses obskure Programmiermodell?Tatsächlich ist dies eine weitere ganz besondere Strategie von Node. Lassen Sie uns zunächst über das Parallelitätsmodell des Blockierungsmodus sprechen. Wenn wir beispielsweise einen Webserver entwickeln möchten, muss dieser natürlich Parallelitätsanforderungen haben. Es kann mehreren Benutzern gleichzeitig den Zugriff ermöglichen. Dies bedeutet nicht, dass ich die Anfrage eines Benutzers verarbeitet habe. In diesem Fall ist die Verarbeitungsgeschwindigkeit sehr langsam Wenn der Benutzer sehr langsam ist und die Verbindung nicht trennt, warten andere Benutzer weiter, was unangemessen ist. Um Parallelität im Blockierungsmodus zu erreichen, muss ein Prozess verwendet werden, der nur eine Aufgabe verarbeiten kann Der Durchsatz der CPU, der verwendet werden muss, ist möglicherweise viel mehr als die Anzahl der CPU-Kerne. Dies ist beispielsweise für eine unserer Logiken unvorhersehbar Berechnen Sie zuerst einen Teil und initiieren Sie dann eine E/A-Anforderung, z. B. das Lesen einer Datei oder das Schreiben einer Datei oder das Initiieren einer Netzwerkanforderung, und geben Sie dann unseren zweiten Berechnungsteil ein. Um Parallelität zu erreichen, können wir den Multithreading-Modus verwenden und ihn ausführen Ein solches Beispiel: Angenommen, wir haben eine einzelne CPU, dann übernimmt der erste Thread die CPU zur Berechnung und erreicht dann die E/A-Anforderungsstufe. Zu diesem Zeitpunkt wird die Steuerung der CPU übertragen Zu diesem Zeitpunkt übernimmt der zweite Thread die CPU, tritt dann in die E/A ein, wird erneut blockiert und gibt dann die Kontrolle über die CPU, Thread 3, Thread 4, Thread 5 usw. frei. Anschließend kann es zu einer Leerlaufzeit kommen in der Mitte, und warten Sie dann auf Thread 1. Die E/A ist beendet, und dann wird festgestellt, dass die CPU nicht belegt ist. Sie verwendet die CPU, um Berechnungen einzugeben, z. B. einen gleichzeitigen Präemptivmodus, der auf Berechnung und E/A basiert, jedoch nicht Blockierungsmodell, sein Modell wird wie folgt aussehen: Eine Single-Threaded-Berechnung 1 initiiert eine asynchrone E/A-Anfrage. Zu diesem Zeitpunkt wird direkt eine andere Berechnung 1 eingegeben, die möglicherweise von einem anderen Benutzer initiiert wurde, und dann eine initiiert zweite Anfrage, und warten Sie dann auf 5 Benutzer. Die Berechnung des ersten Benutzers ist zu diesem Zeitpunkt beendet, und dann ist unsere Ereignisschleife ein einzelner Thread, der die vom ersten Benutzer initiierte E/A-Anfrage ausführt Theoretisch beträgt die Auslastung der CPU durch den Prozess im nicht blockierenden Modus 100 %. Dies ist eine ideale Situation. Ein einzelner Thread kann den maximalen Durchsatz erreichen, ohne dass mehrere Threads erforderlich sind. Wenn wir beispielsweise mehrere Kerne haben, wenn wir 2 Kerne haben, öffnen wir 2 Threads. Was ist dann der Vorteil des Nichtblockierens gegenüber dem Blockieren? Multithreading klingt schnell, ist aber tatsächlich nicht so schnell. Aufgrund der Zeitscheibensegmentierung ist das Wechseln der Stationen alle 20 ms sehr ineffizient bei der Auslastung des CPU-Cache, und die Nichtblockierung ist nicht sehr Auch gut. Ja, es wird leicht zur Rückrufhölle führen. Lesen Sie zuerst die erste Datei und dann die zweite Datei. Ich habe hier gerade die Grundlagen von Node vorgestellt. Welche Anwendungen gibt es, nachdem ich lange über Node gesprochen habe? Erstens verfügt Node über viele Module von Drittanbietern. Wenn wir beispielsweise eine Website erstellen möchten, können wir eine Vorlagen-Engine namens Jade verwenden CSS generieren, und es gibt Javascript-Komprimierungstools. Die Verwendung von WebSocket verfügt über Socket.io, die SQL-Datenbank über ORM, OAuth, Daemon-Prozess, Befehlszeilenanalyse und Syntaxanalyse, obwohl es nichts mit DOM zu tun hat. Es kann tatsächlich Datei-Upload, Syntax-Hervorhebung, Parsing-Markdown, Codierungskonvertierung, Bildverarbeitung, Coffeescript und einige statische Analysen auf der Browserseite verarbeiten. Dies ist meine heutige Einführung in Node.js.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.

Empfohlene Lektüre:

Das Ausführungsprinzip des Node.js-Codes

Detaillierte Erläuterung der Verwendung von $apply( ) in AngularJS

Das obige ist der detaillierte Inhalt vonNode.js-Tutorial für Anfänger (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage