Vorheriger Artikel Nächster Artikel

Node.js: Das JavaScript-Framework im Überblick

Aus dem
t3n Magazin Nr. 29

09/2012 - 11/2012

auf Serverseite. JavaScript auf Serverseite? Was absurd klingt, macht die Bibliothek Node.js möglich. In Verbindung mit HTML5-Technologien gelangt die Skriptsprache so zu gänzlich neuen Stärken, etwa in der asynchronen Programmierung. Eine Vorstellung.

Node.js: Das JavaScript-Framework im Überblick

Traditionelle Skriptsprachen wie beispielsweise PHP, die im Bereich der Web-Entwicklung zum Einsatz kommen, basieren auf Anfragen. Eine Anwendung wird also durch eine Anfrage des Clients gestartet. Diese Architektur erweist sich aber vor allem dann als unpraktisch, wenn es darum geht, einen Browser aktiv über Änderungen zu informieren. Eine Anforderung, die immer häufiger im Bereich von Realtime-Web-Anwendungen erforderlich ist.

Hier ergänzt serverseitiges JavaScript sinnvoll den Technologie-Stack einer Web-Anwendung, da eine JavaScript-Anwendung unabhängig von Anfragen der Clients auf dem Server läuft. Nach dem Start ist die Anwendung an einen bestimmten TCP-Port gebunden und wartet auf Anfragen der Clients. Sobald eine Verbindung aufgebaut ist, besteht die Möglichkeit, dass der Server aktiv mit dem Client kommuniziert.

Node.js

Eine konkrete Implementierung von JavaScript auf dem Server ist Node.js [1], das 2009 von Ryan Dahl ins Leben gerufen wurde und seit dieser Zeit stetig an Bekanntheit gewinnt. Den Kern bildet Googles V8-Engine, diese kommt auch als JavaScript-Engine in Googles Browser Chrome zum Einsatz.

Bislang kommt Node.js jedoch nur selten über die experimentelle Nutzung hinaus. Grund dafür ist zum einen das frühe Entwicklungsstadium, auf das auch die aktuelle Versionsnummer 0.8 hinweist. Es zeigt sich vor allem in häufigen Änderungen der APIs, was es Entwicklern schwer macht, immer die aktuelle Version zu verwenden, ohne die eigene Applikation grundlegend zu ändern. Doch die Entwicklungstendenz von Node.js geht hin zum Einsatz von Node.js in professionellen Web-Applikationen, vor allem im Bereich der bidirektionalen Kommunikation zwischen Client und Server.

dms 36db2bdb1bf713c993af4b79b8914def
Die serverseitige JavaScript-Implementierung Node.js gewinnt trotz frühem Entwicklungsstadium stetig Sympathien.

Single- vs. Multi-Threading

Node.js setzt auf Single-Threading, es steht also lediglich ein Programm-Thread für die Anwendung zur Verfügung. In der Folge kann auch nur ein Kommando „gleichzeitig“ ausgeführt werden, was im ersten Schritt keine Parallelisierung erlaubt. Diese Architektur ist allerdings bewusst gewählt, da mit Multi-Threading auch die Anforderungen an den Entwickler steigen. So steht beim Multi-Threading nicht nur ein Thread für das Programm zur Verfügung, sondern mehrere, die sich im gleichen Programmkontext bewegen. Dabei muss etwa auf Thread-Safety, also die Steuerung des Zugriffs paralleler Threads auf eine Ressource, geachtet werden. Auch die Fehlersuche gestaltet sich bei dieser Art der Programmierung schwieriger, da bestimmte Arten von Fehlern nur bei einer bestimmten Konstellation und zeitlichen Abfolge von abhängigen Threads auftreten.

Um dennoch den Prozess nicht mit einer Anfrage für andere Anfragen zu blockieren, setzt Node.js auf ein ausgelagertes I/O-System. I/O steht für Input/Output, also Schreib- und Leseoperationen, sowohl auf der Festplatte als auch in der Datenbank. Während eine Anfrage bearbeitet wird, ist der Prozess für gewöhnlich blockiert. Aus diesem Grund wird I/O in Node.js ausgelagert und asynchron durchgeführt.

Den Kern der asynchronen Bearbeitung von Node.js bildet der Event Loop. Er nimmt Anfragen für I/O und Callbacks, also Funktionen, die ausgeführt werden, sobald I/O-Anfragen bearbeitet wurden, entgegen. Die Kontrolle erhält anschließend ein externer Prozess, Node.js kann sich um andere Operationen kümmern. Sobald der I/O-Prozess beendet ist, wird das Ergebnis an den Event Loop zurückgegeben, der den zuvor definierten Callback mit den Ergebnissen aufruft; die Bearbeitung läuft regulär weiter.

Die Kombination des ausgelagerten I/O-Systems mit Event Loop und dem Single-Threading macht Node.js zu einer äußerst performanten Lösung. Im Zusammenspiel mit verschiedenen anderen Technologien und Plattformen ist es deshalb ein idealer Bestandteil hochperformanter Web-Applikationen.

1 3
Vorheriger Artikel Zurück zur Startseite Nächster Artikel
6 Antworten
  1. von Seyreb am 31.03.2013 (16:26Uhr)

    Frühes Entwicklungsstadium?
    Was hat das mit dem Versionierungschema zu tun?
    Node.js ommt auf jeder menge Seiten zum Einsatz, und das teilweie schon seit Jahren!
    Habt ihr andere Artikel genauso schlecht recherchiert?

    Antworten Teilen
  2. von Pascal192 am 31.03.2013 (18:02Uhr)

    Der Post ist doch an mehreren Stellen schon nicht mehr aktuell...

    Antworten Teilen
  3. von Lars Budde am 03.04.2013 (09:50Uhr)

    @Pascal Der Artikel stammt aus dem t3n-Magazin Nr. 29. Die Erstveröffentlichung war - wie du oben nachlesen kannst - am 28.08.2012. Möglicherweise erklärt das die fehlende Aktualität, die du bemängelst.

    Antworten Teilen
  4. von Bastey am 18.04.2013 (10:03Uhr)

    Node.js ist defintiv ausgereift. Die vielen Änderungen der Funktionen und Methoden (und damit auch der Dokumentation), sind seit Ende letzten Jahres m.M.n. nicht mehr das Problem. Natürlich muss, im Gegensatz zu PHP oder Ruby, der Code zur Zeit noch regelmäßig auf die Funktionalität geprüft werden (wenn man Node.js aktualisiert), da nicht unbedingt eine 100%ige Abwärtskompatibilität gegeben sein muss. Aber es ist nicht mehr so dramatisch wie vor einem Jahr.

    Node.js ist eine sehr attraktive Alternative (ja, Alternative) zu Ruby, PHP und co. Applikationen wie Calipso zeigen eindrucksvoll, was wirklich mit Node.js machbar ist. Ich bin gegenwärtig am überlegen, warum man noch bei PHP bleiben sollte. Besonders bei Anwendungen die höherer Last ausgesetzt sind und wo man auch nur eine Anwendung auf einem Host betreibt, gebe ich Node.js den Vorzug. Für multi-node.js-Umgebungen (also Server auf denen mehrere Instanzen bzw. Anwendungen laufen), habe ich bisher noch nicht das Tool gefunden, welches das Organisieren ebendieser Anwendungen bequem ermöglicht (es gibt einige Tools, bisher aber noch nicht so bequem, dass Lieschen Müller damit umgehen könnte). Da bleiben Ruby und PHP *noch* erste Wahl. Ich kann mir aber vorstellen, dass sich dies bald ändern könnte.

    Was natürlich auch beachtet werden muss, ist die Schwerfälligkeit der Using-Community. Also jener Webmaster, Hoster und IT-Anbieter, die später Node.js einsetzten müssten. Das Beispiel Nginx zeigt ja, dass bessere Software nicht unbedingt ein Argument für einen Umstieg ist. Anders kann man die herrschende Dominanz von Apachewebservern nicht erklären. Ähnlich kann/wird es wohl auch Node.js gehen. Ein Tool für Nerds, Geeks & Enterprise-Entwickler.

    Antworten Teilen
  5. von asmuelle am 11.06.2013 (11:39Uhr)

    Ich habe zur Zeit 5 Webapplikationen im Einsatz, die skalieren deutlich besser als ihre Tomcat Vorgänger und sind sehr stabil.

    Antworten Teilen
  6. von areanet am 04.07.2014 (11:20Uhr)

    Wer mehr über die technische Umsetzung von node.js und Co. erfahren will, für den haben wir ein fünfteiliges Tutorial zum Thema "Entwicklung einer Echzeit-Multiscreen-App" in unserem Blog zusammengestellt: http://www.app-agentur-bw.de/blog/multiscreen-tutorial-chat-mit-websockets-teil-1-einfuehrung

    Antworten Teilen
Deine Meinung

Bitte melde dich an!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

  1. Pingback von am 31.03.2013 (17:49Uhr)
Aktuelles aus dem Bereich JavaScript
t3n-Aktion: „Schrödinger lernt HTML5, CSS3 und JavaScript“ [+Verlosung]
t3n-Aktion: „Schrödinger lernt HTML5, CSS3 und JavaScript“ [+Verlosung]

Du willst in die Webentwicklung einsteigen und HTML5, CSS3 und JavaScript lernen? Das etwas andere Fachbuch „Schrödinger lernt HTML5, CSS3 und JavaScript“ vermittelt mit Witz die Theorie und … » weiterlesen

Skytte: Das beste HTML5-Browsergame aller Zeiten?
Skytte: Das beste HTML5-Browsergame aller Zeiten?

Hier könnt ihr nicht nur ein cooles HTML5-Browsergame spielen – wir geben euch auch einen kleinen Einblick zur Produktion von Skytte. » weiterlesen

HTML, PHP, WordPress und Co. – Diese Referenzen sollten Webworker kennen
HTML, PHP, WordPress und Co. – Diese Referenzen sollten Webworker kennen

Aktuelle und halbwegs übersichtliche Referenzen sind sehr nützlich, wenn man mal wieder nicht sicher ist, wie ein Tag oder eine Funktion genau geschrieben wird und was für Parameter übergeben … » weiterlesen

Kennst Du schon unser t3n Magazin?

t3n 36 jetzt kostenfrei probelesen! Alle Inhalte des t3n Magazins Diesen Hinweis verbergen