2x Nein, 4x Ja: Szenarien für Node.js

Wer die Entwicklung von Node.js in den vergangenen Jahren verfolgt hat, könnte glauben, die Silberkugel sei entdeckt worden. Doch wie jede Technologie eignet sich auch Node.js nicht gleichermaßen für alle Szenarien.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 6 Min.
Von
  • Golo Roden
Inhaltsverzeichnis

Wer die Entwicklung von Node.js in den vergangenen Jahren verfolgt hat, könnte glauben, die Silberkugel sei entdeckt worden. Doch wie jede Technologie eignet sich auch Node.js nicht gleichermaßen für alle Szenarien.

Der Technologieradar von ThoughtWorks bewertet Node.js in der Ausgabe vom Januar 2014 erstmals als eine ausgereifte und bewährte Technologie, die für den Unternehmenseinsatz geeignet ist. Außerdem wird die Entwicklung von JavaScript als Sprache weiterhin als aufsteigend identifiziert:

"The ecosystem around JavaScript as a serious application platform continues to evolve. Many interesting new tools for testing, building, and managing dependencies in both server- and client-side JavaScript applications have emerged recently."

Doch das ist nicht der einzige Indikator dafür, dass Node.js und JavaScript zunehmend Zuspruch in der professionellen Softwareentwicklung finden.

Google Trends zeigt deutlich, dass das Interesse an Node.js wächst.

Auch eine Analyse auf Basis von Google Trends zeigt deutlich, dass das Interesse an Node.js in den vergangenen Jahren kontinuierlich gewachsen ist – und dass sich diese Entwicklung im kommenden Jahr höchstwahrscheinlich in ähnlicher Form fortsetzen wird.

Dennoch gilt es, nichts zu überstürzen: Denn allem Hype zum Trotz ist Node.js nicht für alle Szenarien gleichermaßen geeignet. Wie jedes Werkzeug weist auch Node.js Stärken und Schwächen auf. Das wirft die Frage auf, für welche Vorhaben Node.js eine gute Wahl darstellt und für welche nicht.

Einen ersten deutlichen Hinweis, für welche Szenarien Node.js ungeeignet ist, gibt bereits die auf der Webseite der Plattform genannte Vision:

"Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices."

Ein zentraler Aspekt von Node.js ist die asynchrone, nicht-blockierende Ein- und Ausgabe von Daten im Rahmen eines Eventloops. Wer diese Konzepte kennt, weiß, dass aufwändige Vorgänge die gesamte Anwendung blockieren können.

Daher ist Node.js eine schlechte Wahl für rechenintensive Anwendungen - wie der inzwischen nicht mehr verfügbare Blogeintrag "Node.js is cancer" im Oktober 2011 anhand der Berechnung einer Fibonacci-Folge zwar eindrucksvoll, allerdings auch äußerst unsachlich aufgezeigt hat. Nachteilig kommt noch hinzu, dass JavaScript stets mit Fließkommazahlen rechnet: Das steigert zum Einen den Aufwand unnötig und führt zum Anderen zu potenziellen Rundungsfehlern.

Weniger heikel sind klassische CRUD-basierte Anwendungen. Bei diesen spricht zumindest nichts gegen den Einsatz von Node.js, allerdings auch nichts dafür. Für das "Forms over Data"-Paradigma eignet sich Node.js daher nicht besser oder schlechter als ASP.NET, PHP oder vergleichbare Technologien. Als einzigen wesentlichen Vorteil bietet Node.js lediglich eine einheitliche Sprache und ein einheitliches Datenformat für Client und Server.

Doch es gibt auch Szenarien, in denen Node.js seine Stärken fraglos ausspielen kann: Teilweise kommt Node.js die Sprache JavaScript als Basis zu Gute, teilweise aber auch die darunterliegende Architektur und Konzeption.

Ein verhältnismäßig naheliegendes Szenario sind JSON-basierte REST-Dienste: Da sich JSON von Node.js auf Grund der Basis von JavaScript nativ verarbeiten lässt und Node.js zudem perfekt geeignet ist, um HTTP-basierte Webanwendungen zu entwickeln, fällt das Schreiben derartiger Webdienste ausgesprochen leicht. Dafür bedarf es noch nicht einmal ausgefallener Module: Die beiden aufeinander aufbauenden Module Connect und Express genügen vollkommen.

Ähnlich verhält es sich mit dem Streaming von großen Datenmengen: Streams sind ein integrales Kernkonzept von Node.js, um Daten rasch und leichtgewichtig auszuliefern. Außerdem lassen sich Streams in Node.js auf einfache Art orchestrieren, um Daten auf verschiedenen Wegen durch eine Anwendung zu leiten. Die Nähe von JavaScript zur funktionalen und reaktiven Programmierung unterstützt zudem diese Vorgehensweise.

Zwar verfügt Node.js über eine von Haus aus integrierte Unterstützung des HTTP- und des HTTPS-Protokolls, doch sind dies nicht die einzigen gangbaren Varianten. Es existieren zahlreiche Module, die die Unterstützung für alternative Protokolle wie SPDY oder Websockets ergänzen. Das ermöglicht den Verbindungsaufbau vom Server zum Client und auf dieser Basis die Push-basierte Datenübertragung.

Nimmt man all dies zusammen, stellt Node.js die perfekte Plattform für Single-Page-Anwendungen dar: Zunächst wird die eigentliche Anwendung zum Webbrowser übertragen; danach dient dieser nur noch als Datencontainer, der entweder über eine REST-basierte Schnittstelle oder über Websockets angesprochen wird. Da Single-Page-Anwendungen sehr JavaScript-lastig sind, kommen Node.js die Verwendung der Sprache und deren native Unterstützung von JSON erneut zu Gute.

Die Szenarien, in denen Node.js seine Stärken ausspielen kann, sind die Zukunft von modernen Webanwendungen: JSON-basierte REST-Dienste, Streaming, Web-Echtzeit und Single-Page-Anwendungen sind Trends, die man immer weniger ignorieren kann.

Wer sich also mit der Entwicklung von derartigen Diensten und Anwendungen beschäftigt, ist gut beraten, Node.js als Technologie in die engere Wahl zu ziehen.

tl;dr: Node.js eignet sich nicht gleichermaßen für alle Szenarien: Während es für rechenintensive Anwendungen und CRUD wenig geeignet ist, kann es seine Stärken bei JSON-basierten REST-Diensten, Streaming, Web-Echtzeit und Single-Page-Anwendungen ausspielen. ()