
Node.js ist eine JavaScript-Laufzeit. Was bedeutet das und wie funktioniert es?
Die Node.js-Umgebung enthält alles, was Sie zum Ausführen eines in JavaScript geschriebenen Programms benötigen.

Früher konnten Sie JavaScript nur in einem Browser ausführen, aber nachdem die Entwickler es erweitert hatten, können Sie JS jetzt auf Ihrem Computer als eigenständige Anwendung ausführen. Also gab es Node.js.
Mit JavaScript können Sie jetzt viel mehr als nur interaktive Websites.
JavaScript kann jetzt das tun, was andere Skriptprogrammiersprachen wie Python können.
Sowohl browserbasiertes JavaScript als auch Node.js werden in der V8-Laufzeit ausgeführt. Diese Engine verwendet Ihren JS-Code und konvertiert ihn in schnelleren Maschinencode. Maschinencode ist ein Code auf niedriger Ebene, den ein Computer ausführen kann, ohne ihn zuerst interpretieren zu müssen.
Warum Node.js?
Hier ist die formale Definition auf der offiziellen Node.js-Website:
- Node.js - JavaScript-Laufzeit basierend auf der JavaScript V8-Engine von Chrome.
- Node.js verwendet ein ereignisgesteuertes, nicht blockierendes E / A-Modell, das es einfach und effizient macht.
- Das Node.js-Paket-Ökosystem npm ist das größte Open-Source-Bibliotheks-Ökosystem der Welt.
Wir haben bereits die erste Zeile dieser Definition besprochen: "Node.js ist eine JavaScript-Laufzeit, die auf der JavaScript V8-Engine von Chrome basiert." Schauen wir uns nun die beiden anderen Zeilen an, damit wir verstehen, warum Node.js so beliebt ist.
I / O steht für Input / Output. Es kann alles Mögliche sein: vom Lesen / Schreiben lokaler Dateien bis zu einer HTTP-Anforderung in der API. E / A braucht Zeit und blockiert daher andere Funktionen.
Stellen Sie sich ein Szenario vor, in dem wir Benutzer1 und Benutzer2 vom Backend anfordern und sie dann auf dem Bildschirm / in der Konsole drucken. Die Antwort auf diese Anforderung dauert einige Zeit, aber beide Benutzerdatenanforderungen können unabhängig voneinander und gleichzeitig ausgeführt werden.

Ein- / Ausgabe blockieren
Bei der Sperrmethode wird die Datenanforderung für Benutzer2 erst ausgelöst, wenn Daten für Benutzer1 auf dem Bildschirm gedruckt werden.
Wenn es sich um einen Webserver handeln würde, müssten wir für jeden neuen Benutzer einen neuen Thread starten. Aber JavaScript ist Single-Threaded (aber es hat eine Single-Threaded-Ereignisschleife, über die wir etwas später sprechen werden). Daher ist JavaScript für Multithread-Aufgaben nicht sehr geeignet.
Nicht blockierende E / A.
Auf der anderen Seite können Sie mithilfe einer nicht blockierenden Anforderung eine Datenanforderung für Benutzer2 initiieren, ohne auf eine Antwort auf die Anforderung von Benutzer1 zu warten. Sie können beide Anforderungen parallel initiieren.
Nicht blockierende E / A machen Multithreading überflüssig, da der Server mehrere Anforderungen gleichzeitig verarbeiten kann.
JavaScript-Ereignisschleife
Wenn Sie 26 Minuten Zeit haben, lesen Sie die hervorragende Erklärung zum Node Event Loop-Video:
Wenn nicht, finden Sie hier eine schrittweise Erklärung der Funktionsweise der Ereignisschleife in JavaScript:

1. Senden Sie main () an den Aufrufstapel.
2. Senden Sie console.log () an den Aufrufstapel. Es startet sofort und erscheint.
3. Senden Sie setTimeout (2000) an den Stack. setTimeout (2000) ist die Knoten-API. Wenn wir es aufrufen, registrieren wir ein Rückrufereignispaar. Das Ereignis wartet 2.000 Millisekunden und ruft dann einen Rückruf auf.
4. Nach der Registrierung wird setTimeout (2000) im Aufrufstapel angezeigt.
5. Jetzt wird das zweite setTimeout (0) auf die gleiche Weise registriert. Wir haben jetzt zwei Node-APIs, die auf ihre Ausführung warten.
6. Nach dem Warten von 0 Sekunden wird setTimeout (0) in die Rückrufwarteschlange verschoben, und dasselbe passiert mit setTimeout (2000).
7. In der Rückrufausführungswarteschlange warten Funktionen darauf, dass der Aufrufstapel leer ist, da jeweils nur eine Funktion ausgeführt werden kann. Dies stellt eine Ereignisschleife bereit.
8. Die letzte console.log () wird aufgerufen, und main () wird vom Aufrufstapel aufgerufen.
9. Die Ereignisschleife erkennt, dass der Aufrufstapel leer ist, die Rückrufwarteschlange jedoch nicht. Somit werden Rückrufe (in der Reihenfolge) zur Ausführung in den Aufrufstapel verschoben.
Npm

Dies sind von der Community erstellte Bibliotheken. Sie werden die häufigsten Probleme lösen. npm (Node Package Manager) enthält Pakete, die Sie in Ihren Anwendungen verwenden können, um Ihre Entwicklung schneller und effizienter zu gestalten.
Benötigen
Require hat drei Funktionen:
Lädt die mit Node.js gelieferten Module beispielsweise aus dem Dateisystem oder HTTP aus der Node.js-API.
Lädt Bibliotheken von Drittanbietern wie Express und Mongoose, die Sie von npm installieren.
Ermöglicht das Erstellen eigener Dateien und das Aufteilen des Projekts in Module.
Require ist eine Funktion, die einen Pfadparameter verwendet und module.exports zurückgibt.
Knotenmodule
Knotenmodule sind wiederverwendbare Codeblöcke, deren Existenz sich nicht versehentlich auf anderen Code auswirkt.
Sie können Ihre eigenen Module schreiben und in verschiedenen Anwendungen verwenden. Node.js verfügt über eine Reihe integrierter Module, die Sie ohne spezielle Installation verwenden können.
V8 beschleunigt JavaScript mit C ++
V8 ist eine in C ++ geschriebene Open Source Engine.
JavaScript -> V8 (C ++) -> Maschinencode
V8 implementiert ECMAScript gemäß ECMA-262. ECMAScript wurde von Ecma International erstellt, um JavaScript zu standardisieren.
V8 kann autonom arbeiten oder in jede C ++ - Anwendung integriert werden. Dank dessen können Sie Ihren eigenen C ++ - Code schreiben und für JavaScript verfügbar machen.
Ereignisse
Ereignisse sind alles, was in unserer Bewerbung passiert ist und was wir beantworten können.
Der Knoten hat zwei Arten von Ereignissen:
- Systemereignisse: C ++ - Kernel aus der libuv-Bibliothek. (Zum Beispiel das Lesen einer Datei beenden).
- Benutzerdefinierte Ereignisse: JavaScript-Kern.
Hallo Welt in Node.js schreiben
Warum nicht?
Erstellen Sie die Datei app.js und fügen Sie Folgendes hinzu.
console.log ("Hello World!");
Öffnen Sie ein Knotenterminal, ändern Sie das Verzeichnis in den Ordner, in dem die Datei gespeichert ist, und führen Sie den Knoten app.js aus.
Voila - Sie haben gerade "Hello World" in Node.js geschrieben.
Es gibt
unzählige Ressourcen, mit denen Sie mehr über Node.js erfahren können, einschließlich
freeCodeCamp.org.