Node 10, Multi-Threading, N-API und mehr: Anna Henningsen im Interview im Interview zu Node.js

„Ich würde mir wünschen, dass wir in Node.js ein echtes Sandboxing unterstützen“: Node.js Core-Entwicklerin Anna Henningsen im Interview
Keine Kommentare

Was müssen Entwickler über das Upgrade auf Node.js 10 wissen, wohin will das Node-Team mit dem Multi-Threading und was kann das neue N-API? Das alles haben wir Anna Henningsen gefragt, die zum Core-Team von Node.js gehört und dort am Support für Multi-Threading mitarbeitet.

Node.js hat die Schallgrenze von einer Milliarde Downloads durchbrochen und ist ein zentraler Bestandteil der JavaScript-Welt. Anna Henningsen gehört zum Core-Team von Node.js und hat nun im Interview mit uns darüber gesprochen, wie sich Node weiter entwickelt hat, was die neusten Features können und was sie sich für das Tool wünschen würde.

Entwickler: Node.js 10 ist noch längst nicht bei allen Anwendern angelangt. Was ist deiner Meinung nach die wichtigste Neuerung an Version 10?

Anna Henningsen: Erstmal voweg – dass Node.js 10 schon bei allen angekommen ist, erwarten wir auch nicht. Viele Nutzer entscheiden sich erst für ein Upgrade, wenn eine Version in den Long-Term-Support-Modus übergeht. Für Node.js 10 ist das im Oktober der Fall – seinen Code mit Node.js 10 testen sollte man aber auf jeden Fall schon einmal! (Der Zeitplan für Versionen und LTS-Termine findet sich übrigens auf GitHub.)

Im Unterschied zu Node.js 8 sind es aber eher viele kleine Änderungen als einige große, die Node.js 10 ausmachen – ich denke, der neue (noch „experimentelle“) Multi-Threading-Support ist wirklich die größte Neuheit in Node.js 10 bisher.

Entwickler: Neu ist ja auch N-API, das den Upgradeprozess vereinfachen soll. Was genau ändert sich dadurch und wie weit ist die Entwicklung von N-API für die aktuellen LTS-Versionen fortgeschritten?

Henningsen: Das, was N-API vereinfacht, ist vor allem native Add-ons für Node.js auf eine Art zu schreiben, dass man nicht nach jedem Upgrade auf eine höhere Version neu kompilieren muss. In der Vergangenheit war es der Fall, dass Versionsupgrades – zum Beispiel von Node.js 9.x auf Node.js 10.x – die ABI und API verändert haben, vor allem was die API der JavaScript-Engine (V8) angeht. Add-on-Entwickler mussten sich daran anpassen.

Im Vergleich dazu ist N-API eine stabile API, d. h. es wird unbeschränkte Kompabilität mit zukünftigen Node.js-Versionen ermöglicht – es reicht, ein Add-on einmal zu kompilieren, das dann über Node.js-Versionen hinweg genutzt werden kann. Trotzdem heißt das, dass Add-ons erst einmal für N-API umgeschrieben werden müssen, wenn sie bisher die alten Add-on-APIs nutzen.

N-API ist inzwischen als „stabil“ markiert, es wird nur noch wenig hinzugefügt und entfernt wird nichts mehr. Außerdem sind alle unterstützen Versionen, also von Node.js 6 an, mit N-API-Support ausgestattet, es steht der Nutzung also nichts mehr im Wege.

Entwickler: Ein großes Thema in der Node.js-Welt war in diesem Jahr auch die Einführung einer Multi-Threading-Option für Node, die du schon erwähnt hast. Das widerspricht auf den ersten Blick dem Grundgedanken von Node. Welche Idee steckt hinter diesem Feature, warum wurde es eingeführt?

Henningsen:  Die Idee hinter Node.js, I/O vor allem asynchron zu betreiben, bleibt natürlich erhalten. Ein Problem mit dem Ein-Thread-Modell ist aber, dass CPU-intensive Arbeit alles andere aufhält, eben auch den Event Loop. Worker Threads zielen genau darauf ab: CPU-intensive Tasks, die sich auf andere Threads auslagern lassen. Das Feature ist nicht dazu gedacht, dass man I/O auf diese Threads auslagert – das wäre am Ende im Zweifel auch einfach weniger effizient, als der Node.js-Event-Loop es von sich aus regelt.

Entwickler: Wie weit fortgeschritten ist die Implementierung von Multi-Threading in Node.js derzeit?

Henningsen: Die Implementierung ist zur Zeit im „experimentellen“ Zustand, und wird darin wohl auch noch einige Zeit bleiben, das heißt, Änderungen (auch nicht-kompatible, falls nötig) können jederzeit erfolgen. Praktisch gesehen hat sich aber seit der ursprünglichen Implementierung noch nicht viel getan – es wird auch vor allem noch Feedback gesucht.

Entwickler: Wie wird es auf diesem Gebiet weitergehen, in welche Richtung soll sich das Feature entwickeln?

Henningsen: Das steht ein wenig offen. Auf der einen Seite wird es sicherlich bessere Integration an andere Änderungen und Teile von Node.js geben (ES6-Module und native Add-ons, zum Beispiel). Auf der anderen Seite ist es aber unklar, wie nah wir z. B. am WebWorker-API der Browser arbeiten wollen – es gibt einige Ähnlichkeiten, aber auch einige Unterschiede. Z. B. nutzt Node.js ja leider ein anderes Modell für EventEmitter als Web-APIs das tun. Wir müssen also schauen, ob es uns reicht, dass man ein WebWorker-API auf dem existierenden (flexibleren) API aufbauen kann oder nicht.

Falls es Feedback in die Richtung gibt, könnte man auch darüber nachdenken, einen eingebauten Threadpool zur Verfügung zu stellen. Einen Worker zu starten heißt zur Zeit eben auch, eine ganze Node.js-Instanz und V8-Instanz zu starten (wenn auch im gleichen Prozess), also ist es in der Regel nicht sinnvoll, pro Task einen Worker zu starten – es wird davon ausgegangen, dass ein Pooling das sinnvollste ist, ähnlich wie es z. B. der existierende Support für Load Balancing im ‚cluster‘-Modul vorsieht.

Entwickler: Was denkst du persönlich, braucht Node.js das Multi-Threading?

Henningsen: Naja, als die Entwicklerin, die den Großteil davon implementiert hat – ich steh schon hinter dem Feature. 🙂 Wie gesagt, es schließt eine Lücke in Node.js, nämlich parallelisierbare, CPU-intensive Anwendungsfälle. Das Feature sollte also meiner Meinung nach da sein – ob man es für eine durchschnittliche Webanwendung braucht, ist natürlich eine andere Frage.

Entwickler: ES6-Module sind ein anderes großes Thema für viele Entwickler. Wie steht es um die Implementierung von Modulen in Node derzeit? Im Dezember 2017 berichtet das Technical Steering Commitee noch davon, dass es keinen Konsens für eine finale Implementierung gebe. Hat sich dabei inzwischen was getan?

Henningsen: Grundsätzlich steht experimenteller Support auch hierfür zur Verfügung, aber es steht immer noch einiges an Diskussion an, vor allem was die Details der Anbindungen zu den bereits existierenden Modul-Typen angeht (CommonJS, JSON, Add-ons).

Entwickler: Node 11 und weiter: Welche Features würdest du dir für die Zukunft von Node wünschen?

Henningsen: Ich arbeite zur Zeit eher viel an Dingen, die im Hintegrund ablaufen und von denen Entwickler nicht unbedingt viel direkt sehen. Wenn ich einen Wunsch für Node.js „frei“ hätte, dann wäre das, dass wir irgendwann echtes Sandboxing unterstützen – immerhin sind JS-Engines ja genau für diesen Zweck geschrieben, und es ist ein wenig schade, dass Node.js das nicht selbst auch supported.

Vielen Dank für das Interview!

Im Interview: Anna Henningsen

Anna ist über die letzten 2 Jahren, mit viel Leidenschaft für das Projekt und vor allem seine Community, eine der aktivsten Entwicklerinnen im Node.js-Core-Team geworden. Zur Zeit arbeitet sie als Node Core Maintainer für nearForm Ltd., und nähert sich ihrem Master in Mathematik an.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
X
- Gib Deinen Standort ein -
- or -