© EVorona/Shutterstock.com
Das Neue bei Node.js 10 und ein Ausblick zur Weiterentwicklung

Node.js - what’s next?


Seit dem initialen Release 2009 hat sich viel getan, sowohl Gutes als auch weniger Gutes. Die Plattform hat zahlreiche Maintainer kommen und gehen sehen, wurde geforkt und wieder zusammengeführt und ist mittlerweile in ruhigerem Fahrwasser angelangt. Das ist unter anderem der Verdienst einer aktiven Community und vieler engagierter Contributors, die sich um die Stabilität und Performance von Node.js kümmern. Mittlerweile ist die Plattform bei den zweistelligen Versionsnummern angelangt. Ein guter Zeitpunkt, um einen Blick auf die aktuelle Entwicklung zu werfen und zu sehen, was uns in nächster Zeit noch alles erwartet.

Nach der Zusammenführung von Node.js und io.js wurde die Organisation von Node.js radikal geändert. Die Entwicklung der Plattform findet unter dem Dach der Node.js Foundation statt. Diese Organisation ist vergleichbar mit der Linux Foundation, die sich um die Entwicklung des Linux-Betriebssystems kümmert. Statt einer Einzelperson an der Spitze der Entwicklung lenkt mittlerweile ein Technical Steering Committee das Schicksal der Plattform. Das Team hinter Node.js ist also ein Stück weit anonymer geworden, was für eine Plattform hinsichtlich des Einsatzes in Unternehmen allerdings von Vorteil ist, da die Weiterentwicklung und Unterstützung nicht mehr an bestimmte Personen gebunden ist. Das Technical Steering Committee verwaltet in erster Linie den Code und die Dokumentation der Node.js-Plattform und koordiniert diese in regelmäßigen Meetings. Das Gremium ist aber auch für die Releases und die Unterstützung der Community verantwortlich. Eine der am deutlichsten sichtbaren Änderungen, die sich für Entwickler ergeben, ist ein festgelegter Releasetakt. Zweimal jährlich gibt es ein neues Major-Release von Node.js. Dabei sind die Releases mit den geraden Versionsnummern Long-Term-Support-Releases (LTS) mit einer längeren Unterstützung seitens der Node.js Foundation. Der Lebenszyklus der ungeraden Versionen endet hingegen nach einem halben Jahr. Ein LTS-Release wird nach einem halben Jahr als reguläre Version in den LTS-Zyklus überführt. Dann wird die Version über einen Zeitraum von achtzehn Monaten aktiv unterstützt und für weitere zwölf Monate mit Sicherheitsupdates und Fehlerbehebungen versorgt. Dieser Schritt war vor allem für den Einsatz von Node. js in größeren und länger laufenden Projekten ein großer Vorteil, da dadurch die Planbarkeit erheblich verbessert wird. Bei der Versionierung folgt Node.js den Vorgaben von Semantic Versioning. Das bedeutet, dass es in den halbjährlichen Releases Breaking Changes in den Schnittstellen geben darf. Zwischen diesen Major-Releases bleibt das API allerdings stabil, sodass in den meisten Fällen bedenkenlos aktualisiert werden kann. Auch bei den Major Releases gehen die Maintainer vorsichtig mit Breaking Changes um. Meist werden Schnittstellen zuerst als Deprecated markiert und erst in der darauffolgenden Version entfernt. Insgesamt ist Node.js mit dieser Art der Releaseplanung wesentlich stabiler und verlässlicher geworden.

Die Kernthemen für die Weiterentwicklung

Die vorrangigen Ziele, die die Entwickler von Node.js seit jeher verfolgen, sind Stabilität, Performance und Sicherheit, und das schlägt sich auch in der Entwicklung der Plattform nieder. Offiziell gibt es zwar keine technische Roadmap, allerdings sehen Sie an den neuen Features der Plattform sehr deutlich, welche Richtung die Entwickler einschlagen. In seinem Vortrag auf der NodeConf EU 2017 ging der Node.js-Kernentwickler James Snell auf genau dieses Thema ein: „What’s next in Node.js?“ Die Kernthemen für die Weiterentwicklung sind:

  • Verbesserte Diagnose und Werkzeuge

  • Verbesserte Unterstützung von Standards

  • Ausrichtung an der Webplattform

  • Erhöhung der Plattformdiversität

  • Bessere Entwickler-Experience

  • Verbesserter Securityprozess

Was ist neu in Node.js 10?

Bevor wir uns im nächsten Abschnitt den experimentellen Schnittstellen der Plattform zuwenden, erfahren Sie nun mehr über die wichtigsten Änderungen im letzten Release [1]:

  • Engere Abstimmung mit den experimentellen Releases von Node-ChakraCore.

  • Das N-API hat den experimentellen Status verlassen und wurde offiziell als stabiles Modul in den Kern der Plattform aufgenommen.

  • Innerhalb des async_hooks-Moduls wurden einige zuvor als Deprecated markierte Methoden entfernt.

  • Eine der am häufigsten anzutreffenden Deprecation Warnings wird durch eine Änderung am Buffer-Modul verursacht. Buffer-Objekte sollten aus Sicherheits- und Usabilitygründen nicht mehr mit dem Buffer-Konstruktor erzeugt werden, stattdessen sollten Sie Buffer.alloc, Buffer.allocUnsafe oder Buffer.from nutzen.

  • Die console.table-Methode wurde aufgenommen, um Informationen in Tabellenform auf der Konsole auszugeben.

  • Einige Methoden des crypto-Moduls wurden als deprecated markiert.

  • Node 10 basiert auf Version 6.6 der V8 Engine [2].

  • OpenSSL wurde auf die Version 1.1.0h aktualisiert.

  • Dem Dateisystemmodul wurde eine Promise-basierte Variante des API hinzugefügt; diese ist unter fs/promises erreichbar.

  • Das Performance API wurde überarbeitet.

  • Im REPL wird await mit dem --experimental-repl-await-Flag auch außerhalb von Funktionen unterstützt; dieses Feature ist ein erster Vorgeschmack auf das Top-Level-await, das sich aktuell im Draft-Status im TC39 befindet.

  • Das WHATWG URL API ist global verfügbar.

Eine vollständige Liste der Änderungen finden Sie im Blogeintrag zum Release unter [3]. Alternativ können Sie einen Blick ins Changelog werfen. Die Changelogs aller Node.js-Versionen liegen unter [4].

Experimentelle Features der Node.js-Plattform

Die konkrete Weiterentwicklung der Node.js-Plattform lässt sich am besten am Quellcode beziehungsweise sogar an der Dokumentation ablesen. Alle Node.js-Module verfügen über einen Stabilitätsindex, der für den Entwicklungsstand eines Moduls steht. Der Stabilitätsindex besteht aus drei Stufen, von denen vor allem die ersten beiden Stufen für die Abbildung des Entwicklungsprozesses von Interesse sind. Stufe 0 bezeichnet Module und Funktionen, die als veraltet markiert sind. Diese werden nicht weiter unterstützt und in einer der nächsten Versionen aus dem Kern der Plattform entfernt. Gerade das util-Modul unterliegt hier einem relativ umfangreichen Umbau. Methoden wie util.isBoolean werden über kurz oder lang aus dem Kern verschwinden. Bei den meisten dieser als deprecated markierten Features haben die Entwickler eine Empfehlung für einen Ersatz eingefügt. So kann util.isBoolean beispielsweise durch typeof valu === ‚boolean‘ ersetzt werden. Neben diesen Informationen finden Sie auch die Versionsnummer, seit der die Funktionalität als deprecated markiert ist. Je älter diese Version ist, umso wahrscheinlicher ist es, dass das Feature in naher Zukunft entfernt wird.

Die Stufe 1 des Stabilitätsindex wird experimentellen Features zugewiesen. Das sind meist neue Features, die Ihnen als Entwickler von Applikationen bereits zur Verfügung gestellt werden, sich allerdings noch nicht in der Praxis bewährt haben. Bei diesen Modulen ist noch mit mehr oder weniger umfangreichen API-Änderungen zu rechnen. Beim Einsatz in einer Produktivumgebung sollten Sie im Idealfall keine experimentellen Features einsetzen. Aktuell ist die Liste der experimentellen Features für Node.js-Verhältnisse relativ lang. Werfen wir also einen Blick auf die neuen Features, die Node.js zu bieten hat.

HTTP/2

In Version 8 wurde das http2-Modul eingeführt. Die Integration der zweiten Protokollversion von HTTP in den Kern von Node.js hat lange auf sich warten lassen. In der Zwischenzeit mussten Sie sich als Entwickler mit Modulen von Drittanbietern wie dem SPDY-Modul behelfen. Bei der Umsetzung des Moduls haben sich die Entwickler dazu entschieden, nicht API-kompatibel zum http-Modul zu bleiben, sondern e...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang