Heim > Artikel > Web-Frontend > Ist nodejs js?
nodejs ist kein js, sondern eine Plattform, die die Ausführung von js auf dem Server ermöglicht. js (vollständiger Name JavaScript) ist eine Programmiersprache und Node ist eine JavaScript-Ausführungsumgebung, die auf der Chrome V8-Engine basiert, einer Entwicklungsplattform, die die Ausführung von JavaScript auf dem Server ermöglicht.
Die Betriebsumgebung dieses Tutorials: Windows7-System, NodeJS-Version 12.19.0, DELL G3-Computer.
nodejs ist kein js, sondern eine Plattform, die die Ausführung von js auf dem Server ermöglicht.
Node.js wurde im Mai 2009 veröffentlicht und von Ryan Dahl entwickelt. Es handelt sich um eine JavaScript-Laufumgebung, die auf der Chrome V8-Engine basiert. Sie verwendet ein ereignisgesteuertes, nicht blockierendes I/O-Modell, um die Ausführung von JavaScript zu ermöglichen serverseitige Entwicklungsplattform, die JavaScript zu einer Skriptsprache macht, die serverseitigen Sprachen wie PHP, Python, Perl und Ruby ebenbürtig ist.
JavaScript kann serverseitige Programmierung basierend auf der Node.js-Technologie durchführen.
Funktionen von Node.js
Nicht blockierendes asynchrones io
Beim Zugriff auf die Datenbank zum Abrufen von Daten dauert es beispielsweise eine Weile. Beim herkömmlichen Single-Thread-Verarbeitungsmechanismus wird nach der Ausführung des Codes für den Zugriff auf die Datenbank der gesamte Thread angehalten und darauf gewartet, dass die Datenbank das Ergebnis zurückgibt, bevor der nachfolgende Code ausgeführt wird. Mit anderen Worten: E/A blockiert die Ausführung des Codes, wodurch die Ausführungseffizienz des Programms erheblich verringert wird.
Aufgrund des in Node.js verwendeten nicht blockierenden E/A-Mechanismus wird nach der Ausführung des Codes, der auf die Datenbank zugreift, der Code dahinter sofort ausgeführt und der Verarbeitungscode für das Datenbankrückgabeergebnis in platziert Rückruffunktion. Dadurch wird die Ausführungseffizienz des Programms verbessert.
Wenn eine E/A abgeschlossen ist, wird der Thread, der die E/A-Operation ausführt, in Form eines Ereignisses benachrichtigt und der Thread führt die Rückruffunktion dieses Ereignisses aus. Um asynchrone E/A verarbeiten zu können, muss der Thread über eine Ereignisschleife verfügen, die ständig prüft, ob nicht behandelte Ereignisse vorliegen, und diese nacheinander verarbeitet.
Im Blockierungsmodus kann ein Thread nur eine Aufgabe bearbeiten. Um den Durchsatz zu verbessern, muss Multithreading verwendet werden. Im nicht blockierenden Modus führt ein Thread immer Berechnungsvorgänge aus und die CPU-Kernauslastung dieses Threads beträgt immer 100 %. Daher ist dies eine besonders philosophische Lösung: Anstatt viele Menschen untätig zu lassen, ist es besser, dass einer sein Leben und seine Arbeit bis zum Tod riskiert.
Single-Threaded
In serverseitigen Sprachen wie Java, PHP oder .net wird für jede Client-Verbindung ein neuer Thread erstellt. Jeder Thread benötigt etwa 2 MB Speicher. Mit anderen Worten: Theoretisch beträgt die maximale Anzahl von Benutzern, die gleichzeitig mit einem Server mit 8 GB Speicher verbunden sein können, etwa 4.000. Damit eine Webanwendung mehr Benutzer unterstützen kann, muss die Anzahl der Server erhöht werden, und natürlich steigen auch die Hardwarekosten der Webanwendung.
Node.js erstellt nicht für jede Client-Verbindung einen neuen Thread, sondern verwendet nur einen Thread. Wenn ein Benutzer eine Verbindung herstellt, wird ein internes Ereignis ausgelöst. Durch nicht blockierende E/A- und ereignisgesteuerte Mechanismen ist das Node.js-Programm makroskopisch parallel. Mit Node.js kann ein Server mit 8 GB Speicher mehr als 40.000 Benutzerverbindungen gleichzeitig verarbeiten.
Darüber hinaus bietet Single Threading den Vorteil, dass das Betriebssystem nicht mehr den Zeitaufwand für die Thread-Erstellung und -Zerstörung hat. Allerdings bringt Single Threading auch viele Nachteile mit sich, die im Detail bei den Nachteilen von Node.js erläutert werden, bitte weiterlesen.
Ereignisgesteuert
Wenn der Client in Node den Aufbau einer Verbindung, die Übermittlung von Daten usw. anfordert, werden entsprechende Ereignisse ausgelöst. In Node kann jeweils nur eine Ereignisrückruffunktion ausgeführt werden, aber während der Ausführung einer Ereignisrückruffunktion treten andere Ereignisse auf und andere Ereignisse können stattdessen verarbeitet werden (z. B. stellt ein neuer Benutzer eine Verbindung her) und dann zurück die Rückruffunktion, die das ursprüngliche Ereignis weiterhin ausführt. Dieser Verarbeitungsmechanismus wird als „Ereignisschleifen“-Mechanismus bezeichnet.
Die unterste Ebene von Node.js ist C++ (V8 ist auch in C++ geschrieben). Fast die Hälfte des zugrunde liegenden Codes wird für die Erstellung von Ereigniswarteschlangen und Rückruffunktionswarteschlangen verwendet. Die ereignisgesteuerte Planung von Serveraufgaben kann sich nur ein Genie vorstellen. Der Tanz auf der Nadelspitze mit Hilfe eines Fadens übernimmt die Aufgabe, viele Aufgaben zu erledigen.
Achten Sie hier auf die Ereignisschleife, die auch als die Essenz von Node.js bezeichnet werden kann. Das Folgende ist ein Zitat von der offiziellen Website von Node.js
┌───────────────────────────┐ ┌─>│ timers │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ pending callbacks │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ idle, prepare │ │ └─────────────┬─────────────┘ ┌───────────────┐ │ ┌─────────────┴─────────────┐ │ incoming: │ │ │ poll │<─────┤ connections, │ │ └─────────────┬─────────────┘ │ data, etc. │ │ ┌─────────────┴─────────────┐ └───────────────┘ │ │ check │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ └──┤ close callbacks │ └───────────────────────────┘
Zitat von der offiziellen Website von Node:
Hinweis: Jedes Feld wird als „Phasen“ der Ereignisschleife bezeichnet.
Jede Stufe verfügt über eine FIFO-Warteschlange mit auszuführenden Rückrufen. Obwohl jede Stufe auf ihre eigene Weise etwas Besonderes ist, führt die Ereignisschleife im Allgemeinen beim Eintritt in eine bestimmte Stufe alle für diese Stufe spezifischen Vorgänge aus und führt dann Rückrufe in der Warteschlange dieser Stufe aus, bis die Warteschlange erschöpft ist oder die maximale Anzahl an Rückrufen erreicht ist hingerichtet worden. Wenn die Warteschlange erschöpft ist oder das Rückruflimit erreicht ist, geht die Ereignisschleife zur nächsten Phase über und so weiter.
Die Ereignisschleife ist ein zentraler Punkt. Interviewer stellen oft Fragen zu bestimmten Ausführungsausgaben. Sie können meinen Artikel lesen
Plattformübergreifend
Node kann zunächst nur auf der Linux-Plattform ausgeführt werden. Später, mit der Entwicklung von Node, bemerkte Microsoft seine Existenz und investierte ein Team, um Node dabei zu helfen, Kompatibilität mit der Windows-Plattform zu erreichen. Als die Version v0.6.0 veröffentlicht wurde, konnte Node direkt auf der Windows-Plattform ausgeführt werden. Node ist plattformübergreifend und basiert auf libuv.
Nachteile von Node.js
Nachteile von Single-Threading
Eine Funktion von Node.js ist Single-Threading, das viele Vorteile mit sich bringt, aber auch Nachteile mit sich bringt sind wie folgt.
Multi-Core-CPU kann nicht verwendet werden
Der Fehler führt dazu, dass die gesamte Anwendung beendet wird und keine asynchronen E/A mehr aufgerufen werden können.
Eine große Menge an Berechnungen belegt die CPU, was dies unmöglich macht Rufen Sie weiterhin asynchrone E/A auf.
Gut in I/O, nicht gut in der Berechnung. Da Node.js bei der Aufgabenplanung am besten geeignet ist und Ihr Unternehmen viele CPU-Berechnungen hat, bedeutet dies tatsächlich, dass diese Berechnung diesen einzelnen Thread blockiert, der nicht für die Node-Entwicklung geeignet ist, aber nicht ohne Lösungen, ich sage nur: Nicht ganz geeignet. Node.js eignet sich sehr gut, wenn die Anwendung eine große Menge gleichzeitiger E/A verarbeiten muss und keine sehr komplexe Verarbeitung innerhalb der Anwendung erfordert, bevor eine Antwort an den Client gesendet wird. Node.js eignet sich auch sehr gut für die Arbeit mit Web-Sockets, um interaktive Echtzeitanwendungen mit langen Verbindungen zu entwickeln. Spezifische Szenarien können wie folgt ausgedrückt werden:
Die erste Kategorie: Benutzerformular-Sammelsystem, Hintergrundverwaltungssystem, Echtzeit-Interaktionssystem, Prüfungssystem, Netzwerksoftware, Webanwendungen mit hoher Parallelität
Zweitens Die zweite Kategorie: Multiplayer-Online-Spiele basierend auf Web, Canvas usw.; Die dritte Kategorie: webbasierte Multiplayer-Echtzeit-Chat-Clients, Grafik- und Text-Live-Übertragungen;
Die fünfte Kategorie: Betrieb von Datenbanken, Bereitstellung von JSON-basierten APIs für Front-End- und mobile Endgeräte; : Yahoo hat das Cooktail-Framework geöffnet und die Funktionen des YUI3-Frontend-Frameworks mithilfe von Node auf die Serverseite ausgeweitet.
Tencent: Wenden Sie Node auf lange Verbindungen an, um Echtzeitfunktionalität bereitzustellen.
Huaban.com, Mogujie: Echtzeitbenachrichtigungen über socket.io.
Alibaba: Sie nutzen hauptsächlich die Leistung paralleler E/A, um eine effiziente Verteilung zu erreichen, und verfügen auch über viele Node-Frameworks.
LinkedIn: Mobile Websites verwenden auch Node Anforderungen für Parallelität und Echtzeit. NetEase verfügt über das Open-Source-Echtzeit-Framework Pomelo von Node
und so weiter...
[Empfohlenes Lernen: „
nodejs-TutorialDas obige ist der detaillierte Inhalt vonIst nodejs js?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!