Grundkonzepte
Node.js oder Knoten ist eine Plattform, mit der JavaScript auf der Serverseite ausgeführt werden kann. Es kann gesagt werden, dass Node.js die modulare Entwicklung von javascript entwickelt hat. Die frühen javascript Anforderungen waren sehr einfach und sie wurden im Grunde genommen als Funktionen geschrieben, gefolgt von prozessorientiertem Schreiben. Später wurden objektorientierte Entwicklungsideen allmählich eingeführt und dann langsam in Klassen geschrieben. Schließlich begann die Entstehung von Node.js das Konzept der modularen JS -Entwicklung, das den aufgeblähten js -Code wie Benennung von Konflikten und anderen Entwicklungsproblemen beseitigte.
Das größte Merkmal Node ist die Einführung von asynchronem I/O und ereignisgesteuerten architektonischen Design. Node.js ist eine Plattform, mit der JS außerhalb des Browsers laufen kann. Sein ursprüngliches Ziel ist es, ereignisgesteuerte, nicht blockierende I/O Webserver zu implementieren
Node.js ist nur eine JavaScript -umgebende Umgebung (oder eine Reihe von Bibliotheken), die die Standard js mit den Funktionen von asynchronem IO, dh Lesen und Schreiben von Netzwerken und Dateien, ergänzt.
Als Bibliothek ist es nichts weiter als eine Melodie -API. Zusätzlich zu leicht anti-humanischen Ereignisrückrufen unterscheidet es sich nicht wesentlich von anderen Back-End-Sprachen (PHP, Python).
Node.js verwendet einen einzelnen Thread -Modus. Jeder Thread vervollständigt eine Funktion. Ein Prozess kann mehrere Threads haben. Alles, was I/OS in einer asynchronen Anforderungsmethode verwendet wird. Nachdem jede asynchrone E/A -Anfrage abgeschlossen ist, wird sie in die Ereigniswarteschlange gedrängt und wartet, bis der Programmprozess verarbeitet wird.
Kurz gesagt, die Kernidee des node lautet: nicht blockierende, einköpfige und ereignisgesteuerte. (Synchron entspricht der Blockierung, asynchron entspricht nicht blockierender)
Node.JS Architekturdiagramm
Einzelfaden
Die Ausführungsumgebung der javascript -Sprache ist "einzelner Thread".
Der sogenannte "einzelne Thread" bedeutet, dass eine Aufgabe jeweils nur abgeschlossen werden kann. Wenn es mehrere Aufgaben gibt, müssen Sie sich anstellen, die vorherige Aufgabe ausführen, die nächste Aufgabe ausführen und so weiter.
Der Vorteil dieses Modells besteht darin, dass es relativ einfach zu implementieren ist und die Ausführungsumgebung relativ einfach ist. Der Nachteil ist, dass die nachfolgenden Aufgaben, solange es eine Aufgabe gibt, die lange Zeit dauert, die Ausführung des gesamten Programms verzögert werden muss. Gemeinsame Browser reagieren häufig nicht (falscher Tod), da ein bestimmtes Stück Javascript -Code für lange Zeit (wie z.
Die Engpässe der meisten Webanwendungen befinden sich in I/O , dh, lesen und schreiben, lesen und schreiben Netzwerke und lesen und schreiben Datenbanken. Welche Strategie zum Warten auf diesen Zeitraum ist, ist der entscheidende Punkt, um die Leistung zu verbessern
Synchron und asynchron
Um dieses Problem zu lösen, unterteilt Javascript -Sprache den Ausführungsmodus von Aufgaben in zwei Typen: synchron (synchron) und asynchron (asynchron).
"Synchronous -Modus" ist der Modus des vorherigen Abschnitts. Die letztere Aufgabe wartet darauf, dass die vorherige Aufgabe endet und dann ausgeführt wird. Die Ausführungsreihenfolge des Programms ist konsistent und synchron mit der Anordnung der Aufgaben. Der "asynchrone Modus" ist völlig anders. Jede Aufgabe hat eine oder mehrere Rückruffunktionen ( callback ). Nachdem die vorherige Aufgabe beendet ist, ist es nicht die nächste Aufgabe, sondern die Rückruffunktion wird ausgeführt. Die letztere Aufgabe wird ausgeführt, ohne auf die vorherige Aufgabe zu warten, sodass die Ausführungsreihenfolge des Programms inkonsistent und asynchron mit der Anordnungsreihenfolge der Aufgaben ist.
"Async -Modus" ist sehr wichtig. Auf der Browserseite sollten langfristige Operationen asynchron ausgeführt werden, um zu vermeiden, dass der Browser die Reaktion verliert. Das beste Beispiel sind Ajax -Operationen. Auf der Serverseite ist der "Asynchronous-Modus" sogar der einzige Modus, da die Ausführungsumgebung einsthread ist. Wenn alle http Anforderungen synchron ausgeführt werden dürfen, sinkt die Serverleistung stark und verliert bald ihre Antwort.
Prozesse und Fäden
Prozesse und Fäden im Mac -System
Aus der Abbildung können wir feststellen, dass ein Prozess mehrere Threads enthalten kann. Prozesse sind wie Workshops in Projekten. Themen sind Arbeiter in diesem Workshop. In dem Betriebssystem, das Threads einführt, verwenden sie in der Regel Prozesse als grundlegende Einheit für die Zuteilung von Ressourcen und Threads als grundlegende Einheit für den unabhängigen Betrieb und die unabhängige Planung. Da Themen kleiner als Prozesse sind und im Grunde keine Systemressourcen besitzen, ist der Overhead der Planung viel kleiner, was den Grad der gleichzeitigen Ausführung zwischen mehreren Programmen im System effizienter verbessern kann.
der Unterschied
Der Unterschied zwischen einem Thread und einem Prozess besteht darin, dass der untergeordnete Prozess und der übergeordnete Prozess unterschiedliche Code- und Datenräume haben, während mehrere Threads Datenräume teilen, jeder Thread seinen eigenen Ausführungsstapel und einen Programmzähler für seinen Ausführungskontext hat. Multithreading wird hauptsächlich verwendet, um die CPU -Zeit zu sparen und sie gemäß der spezifischen Situation zu verwenden. Die Speicherressourcen und die CPU des Computers müssen während des Ausführens eines Threads verwendet werden.
Module und Packungsmodule
Modul: Eine Datei, die bestimmte spezifische Funktionen zur Implementierung der modularen Programmierung implementiert. Führen Sie Module durch, durch den Request (Modulname).
- Funktionen in Modulen (z. B. Variablen, Funktionen) werden dem Anrufer zur Verfügung gestellt, indem dem exports eine Eigenschaft zugewiesen wird.
Wie benutze ich Module?
Es ist sehr bequem, Module im Knoten zu verwenden. Im JavaScript -Code können Sie die globale Funktion require() zum Laden eines Moduls. Zum Beispiel können wir require("http") verwenden, um das mit node gelieferte HTTP -Servermodul zu laden.
Tasche
Paket: Ein Paket ist ein Ordner, in dem Module für Release, Update, Abhängigkeitsverwaltung und Versionskontrolle verkauft werden. Beschreiben Sie Paketinformationen über package.json: Eingabedateien, Abhängigkeit externe Pakete usw. Installieren Sie das Paket über den Befehl npm install und verwenden das Paket über require .
Asynchroner E/O und ereignisorientiert
Der asynchrone Mechanismus von Node.js ist ereignisbasiert. Jedes I/O ist eine Anfrage. Alle Abfragen für Festplatten I/O , Netzwerkkommunikation und Datenbank werden auf nicht blockierende Weise angefordert. Die zurückgegebenen Ergebnisse werden von der Ereignisschleife verarbeitet. Wie in der Abbildung unten gezeigt:
Der Prozess Node.js verarbeitet nur ein Ereignis gleichzeitig und gibt sofort die Ereignisschleife ein, um die nachfolgenden Ereignisse nach Abschluss zu überprüfen und zu verarbeiten. Der Vorteil davon besteht
Starten Sie die Knotenprogrammierung
Hier empfehle ich Ihnen, webstorm für die Entwicklung node.js zu verwenden, die bequem und schnell und viel einfacher zu verwenden ist als CMD oder Terminals unter Mac.
Was die Knoteninstallation betrifft, bitte Baidu selbst. Ich werde hier nicht auf Details eingehen. Schauen wir uns die Node -Programmierschnittstelle unter webstorm an:
Wir müssen nur mit der rechten Maustaste auf die geschriebene Knotencode-Oberfläche klicken und klicken, was bequem und schnell ist
Das Folgende ist die Ausgangsschnittstelle des Knotens:
Im Mac -System empfehle ich die drei Tools, die ich verwende: Coda2, Webstorm und Sublime Text3. Dies sind die besten Entwicklungstools, die ich bisher habe. Sie können es auch versuchen, welches eher mit Ihrem Geschmack übereinstimmt.
Für die Knotenentwicklung im webstorm müssen Sie zuerst bestimmte Dateien konfigurieren. Jeder sollte Baidu verwenden, um es zu tun. Da mein webstorm konfiguriert wurde, kann ich keinen Screenshot machen, um Ihnen die Schritte anzuzeigen. Die allgemeinen Schritte sind: Klicken Sie unter dem Mac -System zuerst auf webstorm in der oberen Leiste, klicken Sie dann auf perference , klicken Sie dann auf Node.js and NPM , dann klicken Sie auf der rechten Seite auf Konfiguration und schließlich sieht es wie folgt aus:
Die Schritte des Prozesses unter windows -System ähneln diesem Prozess in etwa ähnlich. Die Version, die ich verwendet, ist 8.0.4.
Globale Variablen
Bei der JS -Programmierung ist es am besten, das VAR -Schlüsselwort zu jeder Variablen hinzuzufügen, um zu vermeiden, dass der globale Namespace verschmutzt und das Risiko einer Codekopplung erhöht wird.
Konsole
console wird verwendet, um Zeichen für den Standard -Ausgabestream ( standout ) und den Standardfehlerstream (STDERR) auszugeben.
console.log() druckt Zeichen zum Standardausgabeberadium und endet mit einer neuen Linie, die mehrere Parameter akzeptiert und im C-ähnlichen printf() -Format ausgegeben wird
console.log(__dirname)输出文件目录Berechnen Sie die Code -Laufzeit
console.time(label) console.timeEnd(label)Am Anfang und Ende müssen wir nur das gleiche Etikett geben und jeden Code einfügen, den Sie in der Mitte berechnen möchten.
__filename und __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon