Node.js 24.0.0 wurde veröffentlicht, eine Plattform zur Ausführung von Webanwendungen in JavaScript. Node.js 24.0 gehört zu den Versionen mit langfristiger Unterstützung, dieser Status wird jedoch erst im Oktober nach der Stabilisierung zugewiesen. Die Unterstützung für Node.js 24.x wird bis zum 30. April 2028 fortgesetzt. Die Pflege der vorherigen LTS-Version Node.js 22.x wird bis April 2027 andauern, und die vorvorherige LTS-Version 20.x bis April 2026. Der Support für die LTS-Version 18.x endet am 30. April 2025, und die Zwischenversion Node.js 23.x wird am 1. Juni 2025 eingestellt.
Wesentliche Verbesserungen:
- Im API AsyncLocalStorage wird standardmäßig die Klasse AsyncContextFrame verwendet, die als stabil gekennzeichnet ist. AsyncContextFrame implementiert einen effizienteren Mechanismus zur Verfolgung des asynchronen Kontexts, was die Leistung erheblich steigert.
- Das API URLPattern ist jetzt als globales Objekt verfügbar, das ohne explizite Importierung verwendet werden kann. URLPattern bietet Funktionen zur Überprüfung, ob eine URL einem bestimmten Muster entspricht, was beispielsweise zur Analyse von Links verwendet werden kann.
- Das Berechtigungssystem (Permission Model) wurde verbessert und stabilisiert, um den Zugriff auf bestimmte Ressourcen während der Ausführung einzuschränken (z. B. kann die Erstellung von Kindprozessen, der Schreib- oder Lesezugriff auf bestimmte Bereiche des Dateisystems oder die Verwendung von Erweiterungen eingeschränkt werden). Anstelle des experimentellen Flags „—experimental-permission“ zur Aktivierung des Berechtigungsmodells kann nun das Flag „—permission“ verwendet werden.
- Die Funktionen des Moduls node:test (test_runner), das zum Erstellen und Ausführen von Tests in JavaScript dient, die Ergebnisse im TAP-Format (Test Anything Protocol) zurückgeben, wurden erweitert. Das Modul wartet jetzt automatisch auf den Abschluss von geschachtelten Tests, ohne dass await verwendet werden muss.
- Der HTTP-Client undici wurde auf die Version 7.x aktualisiert, in der die Leistung verbessert wurde und neue HTTP-Funktionen hinzugefügt wurden.
- Die V8-Engine wurde auf Version 13.6 aktualisiert, die in Chromium 136 verwendet wird. Zu den neuen Funktionen im Vergleich zur vorherigen Node.js-Version gehört die Unterstützung von typisierten Arrays Float16Array, manuelle Ressourcenverwaltung, die Methode RegExp.escape (Escaping von Zeichenfolgen für RegExp), 64-Bit-Zeiger (Memory64) in WebAssembly und die Methode Error.isError.
- Der Paketmanager NPM wurde auf Version 11 aktualisiert.
- Die Unterstützung des MSVC-Compilers wurde eingestellt. Zum Kompilieren auf der Windows-Plattform muss ClangCL verwendet werden.
Die Node.js-Plattform kann sowohl für die serverseitige Unterstützung von Webanwendungen als auch für die Erstellung von regulären Client- und Server-Netzwerkprogrammen genutzt werden. Um die Funktionalität von Node.js-Anwendungen zu erweitern, wurde eine umfangreiche Sammlung von Modulen erstellt, in der man Module mit Implementierungen finden kann. Server und HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-Clients, Module zur Integration mit verschiedenen Web-Frameworks, WebSocket- und Ajax-Handler, Datenbank-Connectoren (MySQL, PostgreSQL, SQLite, MongoDB), Template-Engines, CSS-Engines, Implementierungen von Krypto-Algorithmen und Autorisierungssystemen (OAuth), XML-Parser.
Um eine große Anzahl paralleler Anfragen zu verarbeiten, nutzt Node.js ein asynchrones Codeausführungsmodell, das auf ereignisgesteuerter, nicht-blockierender Verarbeitung und der Definition von Callback-Handlern basiert. Zu den Unterstützten Multiplexing-Methoden gehören epoll, kqueue, /dev/poll und select. Zum Multiplexen von Verbindungen wird die Bibliothek libuv verwendet, die auf libev in Unix-Systemen und auf IOCP in Windows aufbaut. Für die Erstellung eines Thread-Pools wird die Bibliothek libeio eingesetzt, für die Durchführung von DNS-Anfragen im nicht-blockierenden Modus ist c-ares integriert. Alle systematischen Aufrufe, die eine Blockierung verursachen, werden innerhalb des Thread-Pools ausgeführt und über ein anonymes Pipe wieder an die Handler zurückgegeben.
Die Ausführung von JavaScript-Code erfolgt durch den Einsatz der von Google entwickelten V8-Engine (zusätzlich entwickelt Microsoft eine Variante von Node.js mit der Chakra-Core-Engine). Im Grunde ähnelt Node.js den Frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted und der ereignisgesteuerten Implementierung in Tcl, aber die Ereignisverarbeitungsschleife (Event Loop) in Node.js ist für den Entwickler verborgen und ähnelt der Ereignisverarbeitung in einer Webanwendung, die im Browser ausgeführt wird.
Quelle: opennet.ru
