Was genau ist Node.js?

Node.js ist eine JavaScript-Laufzeitumgebung. Hört sich toll an, aber was bedeutet das? Wie funktioniert das?

Die Node-Laufzeitumgebung enthält alles, was Sie zum Ausführen eines in JavaScript geschriebenen Programms benötigen.

Node.js entstand, als die ursprünglichen Entwickler von JavaScript es von etwas, das Sie nur im Browser ausführen konnten, auf etwas erweiterten, das Sie auf Ihrem Computer als eigenständige Anwendung ausführen konnten.

Jetzt können Sie mit JavaScript viel mehr tun, als nur Websites interaktiv zu gestalten.

JavaScript kann jetzt Dinge tun, die andere Skriptsprachen wie Python können.

Sowohl Ihr Browser JavaScript als auch Node.js werden auf der V8 JavaScript Runtime Engine ausgeführt. Diese Engine nimmt Ihren JavaScript-Code und konvertiert ihn in einen schnelleren Maschinencode. Maschinencode ist Code auf niedriger Ebene, den der Computer ausführen kann, ohne ihn zuerst interpretieren zu müssen.

Warum Node.js?

Hier ist eine formale Definition, wie sie auf der offiziellen Node.js-Website angegeben ist:

Node.js® ist eine JavaScript-Laufzeit, die auf der V8-JavaScript-Engine von Chrome basiert.

Node.js verwendet ein ereignisgesteuertes, nicht blockierendes E / A-Modell, das es leicht und effizient macht.

Das Paket-Ökosystem von

Node.js, npm, ist das weltweit größte Ökosystem von Open Source-Bibliotheken.

Wir haben bereits die erste Zeile dieser Definition besprochen: “Node.js® ist eine JavaScript-Laufzeit, die auf der V8-JavaScript-Engine von Chrome basiert.” Lassen Sie uns nun die beiden anderen Zeilen verstehen, damit wir herausfinden können, warum Node.js so beliebt ist.

E / A bezieht sich auf Eingabe / Ausgabe. Dies kann alles sein, vom Lesen / Schreiben lokaler Dateien bis zum Senden einer HTTP-Anforderung an eine API.

E / A benötigt Zeit und blockiert daher andere Funktionen.

Stellen Sie sich ein Szenario vor, in dem wir eine Backend-Datenbank für die Details von Benutzer1 und Benutzer2 anfordern und diese dann auf dem Bildschirm / der Konsole drucken. Die Antwort auf diese Anforderung benötigt Zeit, aber beide Benutzerdatenanforderungen können unabhängig und gleichzeitig ausgeführt werden.

Blockieren von E / A

Bei der Blockierungsmethode wird die Datenanforderung von Benutzer2 erst initiiert, wenn die Daten von Benutzer1 auf dem Bildschirm gedruckt werden.

Wenn dies ein Webserver wäre, müssten wir für jeden neuen Benutzer einen neuen Thread starten. JavaScript ist jedoch Single-Threaded (nicht wirklich, aber es hat eine Single-Threaded-Ereignisschleife, auf die wir später noch eingehen werden). Dies würde dazu führen, dass JavaScript für Multithread-Aufgaben nicht sehr gut geeignet ist.

Hier kommt der nicht blockierende Teil ins Spiel.

Nicht blockierende E / A

Andererseits können Sie mithilfe einer nicht blockierenden Anforderung eine Datenanforderung für Benutzer2 initiieren, ohne auf die Antwort auf die Anforderung für Benutzer1 zu warten. Sie können beide Anforderungen parallel initiieren.

Diese nicht blockierende E / A macht Multithreading überflüssig, da der Server mehrere Anforderungen gleichzeitig verarbeiten kann.

Die JavaScript-Ereignisschleife

Wenn Sie 26 Minuten Zeit haben, sehen Sie sich diese hervorragende Video-Erklärung der Knotenereignisschleife an:

Andernfalls finden Sie hier eine kurze schrittweise Erklärung der Funktionsweise der JavaScript-Ereignisschleife.

npm

Dies sind Bibliotheken, die von der großartigen Community erstellt wurden und die die meisten Ihrer allgemeinen Probleme lösen. npm (Node Package Manager) verfügt über Pakete, die Sie in Ihren Apps verwenden können, um Ihre Entwicklung schneller und effizienter zu gestalten.

Erforderlich

Require macht drei Dinge:

Require ist eine Funktion, die einen Parameter “path” akzeptiert und module.exports zurückgibt.

Knotenmodule

Ein Knotenmodul ist ein wiederverwendbarer Codeblock, dessen 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 weitere Installation verwenden können.

V8 lädt JavaScript durch Nutzung von C ++

auf

V8 ist eine in C ++ geschriebene Open Source-Laufzeit-Engine.

JavaScript – & gt; V8 (C ++) – & gt; Maschinencode

V8 implementiert ein Skript namens ECMAScript, wie in ECMA-262 angegeben. ECMAScript wurde von Ecma International erstellt, um JavaScript zu standardisieren.

V8 kann eigenständig ausgeführt oder in jede C ++ – Anwendung eingebettet werden. Es verfügt über Hooks, mit denen Sie Ihren eigenen C ++ – Code schreiben können, den Sie JavaScript zur Verfügung stellen können.

Auf diese Weise können Sie JavaScript im Wesentlichen Funktionen hinzufügen, indem Sie V8 in Ihren C ++ – Code einbetten, sodass Ihr C ++ – Code mehr versteht, als der ECMAScript-Standard sonst spezifiziert.

Bearbeiten: Wie Greg Bulmash mir mitgeteilt hat, gibt es neben V8 von Chrome viele andere JavaScript-Laufzeit-Engines wie SpiderMonkey von Mozilla, Chakra von Microsoft usw. Details dazu finden Sie auf dieser Seite.

Ereignisse

In unserer App ist etwas passiert, auf das wir reagieren können. Es gibt zwei Arten von Ereignissen in Node.

Hallo Welt in Node.js schreiben

Wir müssen das tun, nicht wahr?

Erstellen Sie eine Datei app.js und fügen Sie Folgendes hinzu.

Öffnen Sie Ihr Knotenterminal, ändern Sie das Verzeichnis in den Ordner, in dem die Datei gespeichert ist, und führen Sie node app.js aus.

Bam – Sie haben gerade Hello World in Node.js geschrieben.

Es gibt eine Menge Ressourcen, mit denen Sie mehr über Node.js erfahren können, einschließlich freeCodeCamp.org.