Node.js sollte heute eine der heißesten Technologien sein. In diesem Artikel wird hauptsächlich die Merkmale und Anwendungsszenarien von Node.js.
Node.js ist eine Plattform, die auf der Chrome JavaScript-Laufzeit basiert und mit der Sie problemlos schnelle und einfach zu skalierende Netzwerkanwendungen erstellen können. Node.js wird leicht und effizient mit ereignisgesteuerter und ist ideal für datenintensive Echtzeit-Anwendungen, die auf verteilten Geräten ausgeführt werden.
1. Merkmale
1.1 Asynchrone E/O
Das sogenannte asynchrone E/A ist relativ zu synchronem E/O. Während der Ausführung des Programms müssen viele E/A-Operationen durchgeführt werden, z. B. Lesen und Schreiben von Dateien, Eingabe und Ausgabe, Anforderungsantwort usw. Im Allgemeinen sind E/A-Operationen zeitaufwändig. Im herkömmlichen Programmiermodus müssen Sie beispielsweise eine Datei mit mehreren G lesen. Der gesamte Thread wird angehalten und warten, bis die Datei gelesen wird und weiter ausführt. Mit anderen Worten, I/A -Operationen blockieren die Ausführung von Code und verringern die Effizienz des Programms erheblich.
In Bezug auf asynchrone E/O ist es den Front-End-Ingenieuren eigentlich nicht unbekannt, da die Initiierung einer Ajax-Anfrage der häufigste "asynchrone" Anruf ist. Im Knoten ist das Lesen einer Datei (das Lesen einer Datei ist ein zeitaufwändiger E/A-Vorgang) als Beispiel sehr ähnlich der Art und Weise, eine AJAX-Anfrage zu initiieren:
Die Codekopie lautet wie folgt:
var fs = fordert ('fs');
fs.ReadFile ('/path', Funktion (Err, Datei) {
console.log ('Lesendatei abgeschlossen');
});
console.log ('Lesen von Datei starten');
Nachdem der obige Code als Fs.Readfile bezeichnet wurde, wird der nachfolgende Code sofort ausgeführt, und die Zeit, in der "Lesedatei abgeschlossen ist" ist unvorhersehbar. Wenn ein Thread auf eine E/A -Operation trifft, wartet er nicht, bis die E/A -Operation auf blockierende Weise endet, sondern lediglich die E/A -Anfrage an das Betriebssystem sendet und weiterhin nachfolgende Aussagen ausführt. Wenn das Betriebssystem einen E/A -Betrieb abschließt, wird der Thread, der den E/A -Vorgang ausführt, in Form eines Ereignisses benachrichtigt, und der Thread verarbeitet das Ereignis zu einem bestimmten Zeitpunkt.
1.2 Ereignisschleife und Rückruffunktion
Die sogenannte Ereignisschleife bedeutet, dass der Knoten den Ereignismechanismus verwendet, um alle asynchronen Operationen zu lösen, und ein Thread wird ständig geschoben, um die Ereigniswarteschlange zu erkennen. Die Veranstaltungsschleife überprüft bis zum Ende des Programms nach nicht behandelten Ereignissen in der Veranstaltung. Die Programmiermethode der Ereignisse hat die Vorteile einer leichten, lockeren Kopplung und konzentriert sich nur auf Transaktionspunkte. In dem Szenario mehrerer asynchroner Aufgaben sind Ereignisse jedoch unabhängig voneinander, und die Zusammenarbeit ist ein Problem. In JavaScript sind Callback -Funktionen überall und Rückruffunktionen sind der beste Weg, um asynchrone Anrufe zur Rückgabe von Daten zu akzeptieren.
1.3 Einzelfaden
Der Knoten behält die Eigenschaften von JS als einzelne Faden im Browser bei. Der größte Vorteil eines einzelnen Threads besteht darin, dass kein staatlich bewusstes Synchronisationsproblem wie das Programmieren mit mehreren Threaden erforderlich ist, es gibt weder Deadlock noch den Overhead des Thread-Kontextschalters. Einzelner Thread hat auch seine Schwächen, die sich hauptsächlich in drei Aspekten manifestieren: die Unfähigkeit, Multi-Core-CPU zu verwenden; Fehler werden dazu führen, dass die gesamte Anwendung ausgeht, und die Robustheit der Anwendung verdient der Aufnahmeprüfung der Aufnahme. Eine große Menge an Computing wird die CPU besetzen und es unmöglich machen, weiterhin asynchrone E/A zu bezeichnen.
Um das obige Problem zu lösen, nimmt der Knoten dieselbe Idee an wie HTML5 -Webarbeiter und verwendet Child_process, um das Problem einer großen Berechnung in einem einzelnen Thread zu lösen. Durch die Verteilung der Berechnungen an jeden untergeordneten Prozess kann eine große Anzahl von Berechnungen abgebaut werden und die Ergebnisse können Ereignismeldungen zwischen den Prozessen weitergegeben werden.
1.4 plattformübergreifend
Der Knoten ist plattformübergreifend, dh der gleiche Satz von JS-Code kann bereitgestellt und unter Windows, Linux, OSX und anderen Plattformen ausgeführt werden. Dies ist hauptsächlich darauf zurückzuführen, dass Node eine Architektur-Libuv auf Plattformebene zwischen dem Betriebssystem und dem Modulsystem der Knoten obere Ebene erstellt hat.
2. Anwendungsszenarien
1) Echtzeit-Anwendungen: wie Online-Chat, Echtzeit-Benachrichtigungsschub usw. (wie Socket.io)
2) Verteilte Anwendung: Verwenden Sie vorhandene Daten durch effizientes paralleles E/O
3) Werkzeuganwendung: Massive Werkzeuge von Front-End-Komprimierungsbereitstellung (z. B. Grunzen) bis hin zu grafischen Schnittstellenanwendungen von Desktops
4) Spielanwendungen: Das Spielfeld hat hohe Anforderungen an Echtzeit und Parallelität (wie das Pomelo-Framework von NetEase)
5) Verwenden Sie eine stabile Schnittstelle, um die Funktionen der Webrenderung zu verbessern
6) Unified Front-End-Programmiersprache Umgebung: Front-End-Entwickler können schnell die serverseitige Entwicklung eingeben (z.