Node.js: Was ist das? Funktionen, Anwendung & Grundlagen

Web-Entwicklung
Node.js: Was ist das? Funktionen, Anwendung & Grundlagen

Node.js ist ein Framework für die Skriptsprache JavaScript. Es handelt sich hierbei um eine Open Source Laufzeitumgebung. Mit dieser lässt sich JavaScript-Code außerhalb eines Webbrowsers ausführen. Genau wie JavaScript ist auch Node.js plattformunabhängig. Welche Vorzüge Node.js in der Erstellung von Webseiten hat, besprechen wir hier im Detail.

Grundlegendes zu Node.js

JavaScript wurde entwickelt, um dynamische Webseiteninhalte im Browser zu generieren. Wollte man auch auf dem Server dynamische Inhalte generieren, war man zu Beginn immer noch darauf angewiesen, sich für eine weitere Sprache zu entscheiden. Denn JavaScript war ausschließlich für die Programmierung aufseiten des Webbrowsers bestimmt. 2009 wurde dann Node.js von Ryan Dahl ins Leben gerufen, um diese Lücke zu schließen.

Node.js agiert serverseitig und arbeitet Event-basiert. Was genau bedeutet Event-basiert? Im Kontext der Webentwicklung versteht man unter einem Event eine Aktion, auf die reagiert werden kann. Man kann Events in Kategorien unterscheiden, beispielsweise nutzerbasierte Events wie ein Mausklick, eine Tastatur- oder Spracheingabe. Eine weitere Kategorie wären die anwendungsgenerierten Events, etwa wenn ein HTTP-Aufruf oder Dateizugriff fertiggestellt wurde. Auf diese Aktionen kann das Programm reagieren, sprich: Bei einem Mausklick kann eine oder mehrere darauffolgende Aktionen durchgeführt werden.

Das Framework gilt heute als eines der bekanntesten und meist genutzten JavaScript-Frameworks. Basierend auf der V8 Engine von Google Chrome, welche auch zur Ausführung von JavaScript verwendet wird, lässt sich Node.js ganz einfach mit JavaScript verwenden.

Node.js in der Anwendung

Aufgrund seiner Event-basierten Eigenschaften ist Node.js in der Webserver-Entwicklung gerne gesehen. Denn lange waren Server threadbasiert, und nicht Event-basiert. Aber welchen Unterschied macht das? Ein Beispiel:

In einem Schnellrestaurant steht eine lange Schlange. Die Person an der Kasse bestellt ihr Essen, und bleibt dann, solange vorne in der Schlange stehen, bis ihre Bestellung fertig ist. Die Kasse kann in dieser Zeit keinen weiteren Kunden bearbeiten. Dies wäre gleichzusetzen mit threadbasierten Servern. Ein Event-basierter Server würde wie folgt funktionieren: In unserem Schnellrestaurant steht wieder eine lange Schlange. Die Person an der Kasse bestellt ihr Essen, und geht dann an eine andere Stelle um dort auf ihre Bestellung zu warten. So kann die Kasse den nächsten Kunden abarbeiten. Sobald die Bestellung des ersten Kunden fertig ist, wird dieser benachrichtigt und kann es abholen. Dieses Prinzip ist uns gut bekannt und wirkt auch im realen Leben effizient.

Aufmerksame Leser werden nun feststellen, dass Event-basierte Abläufe Risiko für Blockaden bietet. In unserem Schnellimbiss-Beispiel könnte dies beispielsweise durch Online-Bestellungen passieren, die den Ablauf der Vor-Ort-Kunden etwas ins Stocken geraten lässt.

Mit Node.js ist es möglich darauf zu achten, dass während dieser Events keine Blockaden entstehen. Der Ein- und Ausgang der Events darf nicht behindert werden, dies nennt sich dann non-blockig I/O.

Außerdem ist es auch möglich weit außerhalb der Webentwicklung Software zu erstellen. So lassen sich Skripte für die Kommandozeile und Desktopanwendungen erstellen. Wie bei jeder anderen Allrounder-Sprache gilt aber auch hier Vorsicht. Denn die reine Möglichkeit zur breitgefächerten Nutzung bietet noch lange keine Garantie für Sicherheit oder elegante Lösungen.

Features

Asynchrone Kommunikation

Dieses Feature kennt man auch unter dem Begriff Non-Blocking I/O.  Synchrone Threads, welche für jede Anfrage einen eigenen Thread starten und den gesamten Ablauf blockieren, wollte man damit vermeiden. So hilft Node.js dem Webserver keine einzelnen Threads mehr zu starten. Stattdessen werden mit Node.js sogenannte Single-Threads gestartet. Diese werden dann nacheinander in einer Endlosschleife bearbeitet.

Libuv

Die Endlosschleife zur Abarbeitung von Single-Threads wird durch die Komponente Libuv realisiert. Diese Bibliothek erstellt standardmäßig einen Threadpool der Größe 4. So können standardmäßig bis zu vier Threads gleichzeitig abgearbeitet werden. Außerdem sendet Libuv Anfragen an das Betriebssystem, welches sich um den zeitlichen Ablauf der Threads kümmert. So lassen sich Aktionen ausführen, ohne auf eine vorherige Aktion zu warten. Beispielsweise kann die Webseite weiter generiert werden, während gleichzeitig auf API-Anfragen gewartet wird.

Event-Stack

Mithilfe des Event-Stacks werden diese Aktionen sortiert und fortlaufend abgearbeitet. Dies geschieht nach dem LIFO-Muster: Last In, First Out. Dieser Event-Stack, auch Event-Loop genannt, wartet darauf, dass im Stack eine Funktion ist die ausgeführt werden soll. Gleichzeitig werden neue Funktionen dem Stack hinzugefügt.

Node.js Core

Die V8 Engine, welche auch im Browser ausgeführt wird, ermöglicht es zwar, dass Node.js ganz leicht mit JavaScript verwendbar ist, leider ist die Engine äußerst restriktiv. So lässt sich beispielsweise nicht auf das Dateisystem zugreifen oder Funktionen des Betriebssystems zu verwenden. Dies hat Sicherheitsgründe, da Webseiten nicht ungefragt auf das Dateisystem von Besuchern zugreifen können sollen.

Mit dem Node.js Core, welcher wie die Engine auch in C++ entwickelt wurde, werden Features bereitgestellt die weitaus mehr beherrschen als die V8 Engine. Die Funktionen werden mit Wrappern bereitgestellt, welche C++ Implementierungen unter JavaScript ermöglichen. Hierzu zählen auch Methoden mit denen http-Requests und -Responses verarbeitet werden können. Somit wird die V8 Engine mit weiteren, für Backend-Sprachen wichtigen Funktionen, angereichert.

Server und Client

Vor allem für Einsteiger ist Node.js sehr beliebt. JavaScript allein ist schon einfach zugänglich und für viele neue Webentwickler schnell zu erlernen. Mit der Einführung von Node.js ist es auch möglich das Backend in der gleichen Programmiersprache zu entwickeln, und auf bestehendes Know-How zurückzugreifen.

Node Package Manager (npm)

Node.js hat bei der Erstinstallation bereits eine Reihe äußerst nützlicher Module mitinstalliert. Beispielsweise, das url-Modul mit welchen Funktionen hinzukommen, welche die Arbeit mit URLs vereinfachen. Um weitere Module für den eigenen individuellen Zweck hinzuzufügen, gibt es den Node Package Manager (npm). Dieser steht ebenfalls bei der Erstinstallation zur Verfügung. Mit einer überwältigenden Anzahl von mehr als 350.000 Paketen bleibt kein Wunsch außen vor. Aber es ist auch Vorsicht geboten. Bei dieser Anzahl an Modulen gibt es einige Schwarze Schafe, welche im best-case einfach gar nichts tun, obwohl sie es anders versprechen. Im worst-case greifen sie Nutzerdaten ab, was in der Vergangenheit schon vorgekommen ist.

Aber wie erkennt man ein gutes npm-Modul? Es kann hilfreich sein, sich das Github-Repository genauer anzuschauen.

  1. Wirkt das Profil der Person oder Firma, die es entwickelt hat, vertrauenswürdig?
  2. Wie viele Sterne (Stars) hat das Projekt erhalten? Denn:
    Vor allem die viel genutzten Module werden eine hohe Anzahl an Sternen aufweisen. Schwieriger wird es dies bei besonderen und einzigartigen Anwendungsfällen zu überprüfen. Je exotischer die Anforderungen, desto seltener wird solch ein Modul auch aufgerufen.
  3. Gibt es Mitwirkende, die einen Teil des Moduls mitentwickelt oder verbessert haben?
  4. Wie häufig fand ein Commit statt?

Zusammenfassung

Node.js glänzt vor allem in Kombination mit JavaScript. Sowohl Frontend wie auch Backend in der gleichen Sprache schreiben zu können bietet für viele einen leichten Einstiegspunkt. Mithilfe des Package Managers lassen sich zahlreiche Pakete verwenden. Viele Module wurden bereits von anderen Entwicklern erstellt und erleichtern somit die eigene Entwicklung. Dank der Event-basierten Fähigkeiten und der asynchronen Kommunikation, ist die Entwicklung von dynamischen Webinhalten ein Kinderspiel.



Sie benötigen eine WordPress Agentur? Wir stehen als Ihre Experten zur Verfügung. Treten Sie mit uns in Kontakt und vereinbaren Sie ein unverbindliches Beratungsgespräch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.