Definition „NodeJS“ Was ist Node.js?

Autor / Redakteur: MirkoK / Stephan Augsten

Node.js ist eine Plattform für die Entwicklung eigenständiger JavaScript-Programme, die unabhängig von Host-Anwendungen wie Webbrowser laufen. Mit ihr lassen sich unter anderem serverseitige Skripte, Netzwerktools und WebApps programmieren.

Firma zum Thema

Unter dem Schlagwort „JavaScript everywhere“ soll Node.js die Webentwicklung vereinheitlichen.
Unter dem Schlagwort „JavaScript everywhere“ soll Node.js die Webentwicklung vereinheitlichen.
(Bild: nodejs.org / OpenJS)

Geschichte und Motivation

Ursprünglich war JavaScript nur als eingebundene Skriptsprache für Webbrowser und andere Anwendungen konzipiert. Unter dem Schlagwort „JavaScript everywhere“ will Node.js die Webentwicklung vereinheitlichen, indem es die Sprache auch für serverseitige Programmierung bereitstellt.

Node.js wurde 2009 von dem Programmierer Ryan Dahl entwickelt. Er war unzufrieden mit der ineffizienten Art und Weise, wie Webanwendungen auf Basis von Apache und PHP viele gleichzeitige Verbindungen handhaben. Schlussendlich entschied er sich dazu, JavaScript für serverseitige Programmierung einzusetzen, da ihm das asynchrone Event-System der Sprache gefiel. Damit konnte er ohne komplizierte Multi-Threading-Architekturen eine große Anzahl von Ein-/Ausgabe-Funktionen parallel und effizient ausführen.

Im Jahr 2012 übergab Dahl die Leitung an einen Mitarbeiter, um sich anderen Projekten zuzuwenden. Seit 2019 ist die OpenJS Foundation verantwortlich für die Weiterentwicklung. Sie veröffentlicht alle sechs Monate eine neue Version, normalerweise im April und Oktober. Einmal pro Jahr erscheint eine Version mit Long-Term-Support, die bis zu 30 Monate gepflegt wird. Node.js ist eine vollständig freie Open-Source-Software und steht unter der MIT-Lizenz.

Funktionsweise von Node.js

Node.js basiert auf Googles JavaScript-Engine V8, die auch im Webbrowser Chrome zum Einsatz kommt. V8 ist eine prozessbasierte virtuelle Maschine, die mithilfe eines JIT-Compilers den JavaScript-Code zur Laufzeit in die Maschinensprache der unterliegenden Hardware übersetzt. Just-In-Time-Compiler unterstützen nicht nur viele der statischen Optimierungen üblicher Ahead-Of-Time-Compiler. Da sie den Code während der Programmausführung übersetzen, können sie den Code dynamisch optimieren.

Anders als viele serverseitige Sprachen wie PHP nutzt Node.js „non-blocking I/O“. Dabei müssen Programme nicht auf die Rückkehr von Ein-/Ausgabe-Funktionen warten. Mithilfe von Callback-Funktionen benachrichtigen sie die aufrufende Funktion über ihre Beendigung und ermöglichen so eine asynchrone und parallele Ausführung. Dadurch lassen sich viele gleichzeitige Client-Anfragen schneller und flüssiger abarbeiten.

Node.js lässt sich mit Modulen beliebig erweitern. Der Node Package Manager, kurz npm, kann Module samt ihrer Abhängigkeiten suchen, installieren, entfernen, kompilieren und aktualisieren. Im Oktober 2020 befanden sich bereits über eine Million Pakete im Node.js-Repository. Module können nicht nur in JavaScript geschrieben werden. Mithilfe der N-API lassen sich binäre Pakete in C/C++ und kompatiblen Sprachen programmieren. Ebenso ist es möglich, externe Bibliotheken (DLL, SO, DYLIB) über ein Foreign Function Interface (FFI) zu laden. Darüber hinaus unterstützt Node.js WebAssembly-Module.

Einsatzbereiche von Node.js

Obwohl Node.js vor allem für Serverprogramme und Netzwerk-Tools zum Einsatz kommt, ist die Plattform nicht darauf beschränkt. Neben Netzwerk-orientierten Kommandozeilen-Tools sind auch allgemeine Werkzeuge für die Systemadministration möglich. Mithilfe von Modulen wie node-ncurses oder drawille lassen sich Vollbild-Terminal-Programme wie den Systemmonitor vtop programmieren.

Node.js kann als Backend für Webanwendungen wie Content-Management-Systeme oder Foren dienen, aber auch für WebApps und Desktop-Applikation. Unter anderem basiert das Framework Electron auf der Kombination Chromium und Node.js. Mit Electron wurden einige bekannte Desktop-Anwendungen entwickelt. Dazu zählen die Code-Editoren Atom und Visual Studio Code, Microsoft Teams sowie die Messenger Signal und Skype.

Auch klassisch aufgebaute Desktop-Anwendungen, die nicht der WebApp-Architektur folgen, sind mit Node.js möglich. Mit dem Modul NodeGUI lassen sich grafische Oberflächen auf Basis des GUI-Frameworks Qt5 programmieren. Für Spiele und 3D-Grafiken gibt es Pakete wie nodegl und sdl2-link.

(ID:46935374)