Node.js 22.0 wurde veröffentlicht, eine Plattform zum Ausführen von Netzwerkanwendungen in JavaScript. Node.js 22.0 wird als Langzeit-Support-Zweig eingestuft, dieser Status wird jedoch erst im Oktober nach der Stabilisierung zugewiesen. Node.js 22.x wird bis zum 30. April 2027 unterstützt. Die Wartung des vorherigen LTS-Zweigs von Node.js 20.x dauert bis April 2026 und des vorletzten LTS-Zweigs 18.x bis April 2025. Der Staging-Zweig von Node.js 21.x wird am 1. Juni 2024 eingestellt.
Wichtigste Verbesserungen:
- Die V8-Engine wurde auf Version 12.4 aktualisiert, die in Chromium 124 verwendet wird. Zu den Änderungen im Vergleich zum Node.js 21-Zweig, der die V8 11.8-Engine verwendete, wird Folgendes vermerkt:
- Unterstützung für die WasmGC-Erweiterung, die die Portierung von Programmen, die in Programmiersprachen geschrieben wurden, die einen Garbage Collector (Kotlin, PHP, Java usw.) verwenden, auf WebAssembly vereinfacht. WasmGC fügt neue Arten von Strukturen und Arrays hinzu, die eine nichtlineare Speicherzuweisung verwenden können.
- Unterstützung für die Methode Array.fromAsync(), die asynchron eine neue Instanz eines Array-Objekts zurückgibt, das von einem Array-ähnlichen, iterierbaren oder asynchron iterierbaren Objekt kopiert wurde.
- Unterstützung für Iteratormethoden wie .map, .filter, .find, .take, .drop, .forEach und .reduce.
- Unterstützung für ein Set-Objekt, das eine Sammlung von Werten definiert und Methoden bietet, die allgemeine Mengenoperationen wie Schnittmenge, Vereinigung, Differenz und Addition implementieren.
- Der Maglev-optimierende JIT-Compiler ist standardmäßig aktiviert und zielt darauf ab, schnell leistungsstarken Maschinencode für häufig verwendeten JavaScript-Code zu generieren. Durch die Aktivierung von Maglev können kurzlebige CLI-Anwendungen, die keine langfristigen Vorgänge ausführen, erheblich beschleunigt werden. Beispielsweise wird die Zeit zum Abschließen des Jetstrea-Tests um 7.5 % und des Speedometer-Tests um 5 % verkürzt.
- Die Arbeit mit Streams wurde beschleunigt, indem der Wert der Option highWaterMark von 16 KB auf 65 KB erhöht wurde (definiert die Grenze, bis zu der die Aufzeichnung gepuffert wird). Die Änderung führt zu einem erhöhten Speicherverbrauch, sodass Anwendungen, die für die Ausführung mit begrenztem RAM konzipiert sind, möglicherweise über einen Aufruf von setDefaultHighWaterMark() auf den alten Wert zurückgesetzt werden müssen.
- Verbesserte Leistung der fetch()- und Test-Runner-APIs durch effizientere AbortSignal-Instanziierung. Die Leistung von APIs im Zusammenhang mit der synchronen Arbeit mit Dateisystemen wurde verbessert.
- Es wurde eine experimentelle Funktion bereitgestellt, um den Aufruf „require()“ zum Laden von JavaScript-ESM-Modulen (ECMAScript-Modulen) im synchronen Modus zu verwenden. ESM-Module werden in Browsern verwendet und ersetzen CommonJS-Module, die für Node.js spezifisch sind. Zum Laden über „require()“ muss das ESM-Modul im synchronen Modus (ohne Wait auf der obersten Ebene) ausgeführt werden. Die Unterstützung wird über das Flag „--experimental-require-module“ aktiviert.
- Experimentelle Möglichkeit hinzugefügt, in der Datei package.json definierte Skripte mit dem Befehl „--run“ auszuführen "
- Der Befehl „node –watch“ wurde mit der Implementierung eines Überwachungsmodus in die stabile Kategorie verschoben, der sicherstellt, dass der Prozess neu gestartet wird, wenn sich die importierte Datei ändert (z. B. wenn „node –watch index.js“ ausgeführt wird, wird der Der Prozess wird automatisch neu gestartet, wenn sich index.js ändert.
- Die native Implementierung der WebSocket-API wurde stabilisiert, sodass WebSocket im Client-Modus verwendet werden kann, ohne dass zusätzliche Abhängigkeiten installiert werden müssen.
- Teilweise Unterstützung für die Navigator-API hinzugefügt.
- Die Webstreams-API hat Unterstützung für das Deflate-Raw-Komprimierungsformat hinzugefügt.
- Glob- und GlobSync-Funktionen zu node:fsmodule für den Musterabgleich von Dateipfaden hinzugefügt.
- Verbesserte Handhabung falsch konfigurierter IPv6-Stacks. Implementierter Happy Eyeballs-Algorithmus für schnelles Rollback bei Problemen mit dem IPv6-Betrieb.
- Die Util-API ist veraltet.
- Aktualisierte Abhängigkeitsversionen: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson auf 3.8.0, ada 2.7.7 und undici 6.6.0 .
Die Node.js-Plattform kann sowohl für die serverseitige Unterstützung von Webanwendungen als auch für die Erstellung standardmäßiger client- und serverseitiger Netzwerkprogramme verwendet werden. Um die Funktionalität von Node.js-Anwendungen zu erweitern, wurde eine große Sammlung von Modulen entwickelt, darunter auch solche, die … implementieren. Server und Clients von HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, Module zur Integration mit verschiedenen Web-Frameworks, WebSocket- und Ajax-Handler, Konnektoren zu DBMS (MySQL, PostgreSQL, SQLite, MongoDB), Template-Engines, CSS-Engines, Implementierungen kryptografischer Algorithmen und Autorisierungssysteme (OAuth), XML-Parser.
Um eine große Anzahl paralleler Anfragen zu verarbeiten, verwendet Node.js ein asynchrones Codeausführungsmodell, das auf nicht blockierender Ereignisverarbeitung und der Definition von Callback-Handlern basiert. Zu den unterstützten Methoden zum Multiplexen von Verbindungen gehören epoll, kqueue, /dev/poll und select. Für das Verbindungsmultiplexen wird die Bibliothek libuv verwendet, die ein Add-on zu libev auf Unix-Systemen und zu IOCP unter Windows ist. Die libeio-Bibliothek wird zum Erstellen eines Thread-Pools verwendet und c-ares ist integriert, um DNS-Abfragen in einem nicht blockierenden Modus durchzuführen. Alle Systemaufrufe, die eine Blockierung verursachen, werden innerhalb des Thread-Pools ausgeführt und geben dann wie Signalhandler das Ergebnis ihrer Arbeit über eine unbenannte Pipe zurück.
Die Ausführung von JavaScript-Code wird durch den Einsatz der von Google entwickelten V8-Engine sichergestellt (zusätzlich entwickelt Microsoft eine Version von Node.js mit der Chakra-Core-Engine). Im Kern ähnelt Node.js den Frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted und der Implementierung von Ereignissen in Tcl, aber die Ereignisschleife in Node.js bleibt dem Entwickler verborgen und ähnelt der Ereignisverarbeitung in einer Webanwendung läuft im Browser.
Source: opennet.ru
