JavaScript-Fundamente für Single Page Apps, Teil 4

Die JavaScript-Laufzeitumgebung Node.js

| Autor / Redakteur: Thomas Drilling / Stephan Augsten

Node.js ist dank seines I/O-Modells schlank und soll damit auch besonders effizient arbeiten.
Node.js ist dank seines I/O-Modells schlank und soll damit auch besonders effizient arbeiten. (Bild: Nodejs.org)

Im Kontext von Single Page Apps kommt Node.js nur an Nebenschauplätzen und nicht bei der UI-Entwicklung zum Einsatz. Nichtsdestotrotz ist Node.js eine – wenn auch Server-seitiges – JavaScript-Laufzeitumgebung und soll deshalb im letzten Teil dieser Serie Beachtung finden.

Da Node.js eine Server-seitiges Runtime ist, wird es in vielfältiger Weise zum Implementieren von Webservern im Allgemeinen eingesetzt. Während JavaScript auf dem Client im Browser ausgeführt bzw. interpretiert wird, läuft Node.js auf dem Server in Googles JavaScript-Laufzeitumgebung v8. Anders ausgedrückt: Node.js ist eine JavaScript-Laufzeitumgebung, die auf der JavaScript-Engine v8 von Chrome basiert.

Node.js zeichnet sich durch ein Event-getriebenes, blockierungsfreies I/O-Modell aus und ist daher sehr schlank und damit auch effizient. Als asynchrone, Event-basierte Laufzeitumgebung wurde Node speziell für die Entwicklung von skalierbaren Netzwerkanwendungen geschrieben. Die besondere Effizienz von Node.js ergibt sich dadurch, dass JavaScript als Skriptsprache eine ereignisgesteuerte Architektur vorgibt.

Im Serverbetrieb hat aber eine Ereignis-getriebene Architektur den entscheidenden Vorteil, dass das Konzept je bestehender Verbindung viel weniger Arbeitsspeicher verbraucht, weil für jede geöffnete Verbindung ein eigener Thread gestartet wird. Dies unterscheidet sich von den sonst üblichen Modellen für Parallelität, bei denen Threads des Betriebssystems verwendet werden, was vergleichsweise ineffizient ist.

Node.js-Entwickler müssen sich zudem nicht um Deadlocks im Prozess kümmern, weil es in Node.js nie Blockaden gibt: so gut wie keine Funktion in Node.js führt direkte I/O-Operationen aus, sodass der Prozess auch nie blockiert wird – und weil nichts blockiert, lassen sich mit Node.js skalierbare Systeme sinnvoll entwickeln.

Übrigens wurde Node.js zwar vollständig ohne Threads entworfen, man kann aber trotzdem die Vorteile mehrerer Kerne auf einer Maschine nutzen. Untergeordnete Prozesse lassen sich nämlich mit der „child_process.fork()“-API starten, die für eine einfache Kommunikation entworfen wurde.

Darüber hinaus bringt Node.js eine Reihe von Modulen mit, die direkt in das Binärpaket kompiliert wurden. Neben dem beschriebenen Modul für asynchronen Netzwerkzugriff stehen auch ein Adapter für das Dateisystem, Timmer, Puffer und eine recht allgemein gehaltene Datastream-Klasse zur Verfügung.

Darüber hinaus können zusätzliche Module eingebunden werden, etwa vorkompilierte Dateien mit der Endung .node oder einfach gehaltene JavaScript-Dateien, wenn sich diese an die CommonJS-Konventionen halten. Hierbei handelt es sich um einen Standard für JavaScript-Systeme, die außerhalb von Browsern ausgeführt und mit Hilfe der einer Variable „exports“ Zugriff auf Funktionen und Variablen des jeweiligen Moduls bereitstellen.

Um die Verwaltung der Module kümmert sich der Paketmanager npm. Das npm-Depot enthält fast eine halbe Millionen Pakete und gilt laut Aussage der Node.js-Macher als weltweit größtes Ökosystem für OSS-Bibliotheken.

Node.js 8

Die derzeitige Haupt-Version 8 von Node.js ist nach mehrmaligen Terminverschiebungen im Mai 2017 erschienen. Seit Januar 2018 stehen Nutzer gleich zwei Updates zur Verfügung, die zum allgemeinen Einsatz empfohlene LTS-Version 8.9.4 und die mit neuesten Features versehene Current-Version 9.4.0. Version 8 umfasste seinerzeit Version 5 der npm-Paketverwaltung und Version 5.8 der JavaScript-Laufzeitumgebung v8.

Seit der Version 8.9.5 ist eine aus TurboFan und Ignition zusammengesetzte Compiler-Pipeline default. Eine der interessantesten Neuerungen stellt bis dato experimentelle URL-API nach dem https://url.spec.whatwg.org/ WHATWG URL Standard dar, die ab Mail 2017 vollständig unterstützt wird. Die neue URL-Implementierung passt zu den URL-Implementierungen und APIs aktueller Browser wie Chrome, Firefox, Edge und Safari. Ebenfalls neu ist die Node.js API (N-API), welche laut Aussage der Entwickler eine erhebliche Verbesserung im Vergleich zu den Native Abstractions for Node.js (nan) ist.

Mit den neuen APIs lassen sich zukünftig native Add-ons einmal kompilieren und sind dann in verschiedenen Versionen von Node.js nutzbar. Entwicklern solch nativer Addons wird empfohlen, das neue API möglichst bald zu testen, damit es sich reibungslos in das Ökosystem einfügen lässt.

Fazit

Da sich Webanwendungen in Bezug auf Komplexität und Usability zunehmend weiterentwickeln, werden auch die Prozesse im Hintergrund komplexer Web-Anwendungen immer komplexer. JS-Frameworks können beim Bewältigen dieser Komplexität helfen, auch wenn sie selbst erst einmal zusätzliche Komplexität verursachen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 45195006 / Web Apps)