Serverseitige JavaScript-Plattform Node.js 21.0 verfügbar

Node.js 21.0 wurde veröffentlicht, eine Plattform zum Ausführen von Netzwerkanwendungen in JavaScript. Der Node.js 21.0-Zweig wird 6 Monate lang unterstützt. In den kommenden Tagen wird die Stabilisierung des Node.js 20-Zweigs abgeschlossen, der den LTS-Status erhält und bis April 2026 unterstützt wird. Die Wartung des vorherigen LTS-Zweigs von Node.js 18.0 dauert bis September 2025 und des vorletzten LTS-Zweigs 16.0 bis April 2024.

Wichtigste Verbesserungen:

  • Die Fetch-API wurde als stabil erklärt und ist für das Laden von Ressourcen über das Netzwerk und die Vereinfachung des Schreibens von universellem JavaScript-Code konzipiert, der für die Arbeit auf der Server- und Clientseite geeignet ist. Die Implementierung basiert auf Code des HTTP/1.1-Undici-Clients und kommt der ähnlichen API, die in Browsern bereitgestellt wird, so nahe wie möglich. Die API umfasst die fetch()-Methode und Headers-Objekte. Anfrage und Antwort, die die HTTP-Header, Anfrage und Antwort darstellen. const res = waiting fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = waiting res.json(); console.log(data); }
  • Die Unterstützung für die WebStreams-API, die Zugriff auf über das Netzwerk empfangene Datenströme ermöglicht, wurde stabilisiert. Die API ermöglicht das Hinzufügen eigener Handler, die mit Daten arbeiten, sobald Informationen über das Netzwerk eingehen, ohne auf den Download der gesamten Datei warten zu müssen. Zu den in Node.js verfügbaren Objekten gehören ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream und DecompressionStream.
  • Experimentelle Implementierung des WebSocket-Clients hinzugefügt, kompatibel mit Browsern. Um die WebSocket-Unterstützung zu aktivieren, wird das Flag „--experimental-websocket“ bereitgestellt.
  • Es wurde ein experimenteller Modus für die Verwendung der Standardimplementierung der JavaScript-Module ESM (ECMAScript-Module, die in Modulen für Browser verwendet werden) anstelle von CommonJS (spezifisch für Node.js) hinzugefügt. Die Änderung betrifft keine Module, deren Format explizit über das Feld „type“ in package.json definiert, über das Flag „--input-type“ angegeben ist oder aufgrund der Dateierweiterung (.mjs für ESM, .cjs) offensichtlich ist für CommonJS). Allerdings werden Module, die nicht explizit als CommonJS definiert sind (z. B. mit der Erweiterung „.js“), als ESM-Module behandelt, wenn der neue Modus aktiviert ist. Um neue Moduleinstellungen zu aktivieren, wurde das Flag „--experimental-default-type“ vorgeschlagen.
  • Die V8-Engine wurde auf die in Chromium 11.8 verwendete Version 118 aktualisiert, die jetzt die Methode ArrayBuffer.prototype.transfer, die Möglichkeit zum Gruppieren von Arrays (Methode groupBy) und WebAssembly-Anweisungen zur Verarbeitung von Konstanten (i32.add, i32.sub, i32.mul, i64.add, i64.sub und i64.mul).
  • Die Unterstützung für den globalPreload-Handler wurde zugunsten von Register- und Initialisierungsaufrufen zum Konfigurieren von Modulen eingestellt.
  • Der fs.writeFile-Funktion wurde eine „Flush“-Option hinzugefügt, um zu erzwingen, dass Daten nach jedem Schreibvorgang auf das Laufwerk geleert werden.
  • Verbesserte Leistung von Code im Zusammenhang mit URL-Parsing, Fetch-API, Streams, node:fs und HTTP.
  • Globales Navigatorobjekt hinzugefügt. Um beispielsweise Daten über die Anzahl der CPU-Kerne zu erhalten, können Sie die Eigenschaft navigator.hardwareConcurrency verwenden.
  • Im Parameter „—test“ wurde Unterstützung für Glob-Masken für die Auswahl der auszuführenden Tests hinzugefügt (Sie können beispielsweise „—test **/*.test.js“ angeben).
  • Der mitgelieferte Paketmanager npm 10.2.0 und der llhttp 9.1.2-Parser wurden aktualisiert.
  • Die Unterstützung für Visual Studio 2019 und Versionen von macOS älter als 11.0 wurde eingestellt.

Die Node.js-Plattform kann sowohl für die Serverwartung von Webanwendungen als auch für die Erstellung regulärer Client- und Server-Netzwerkprogramme verwendet werden. Um die Funktionalität von Anwendungen für Node.js zu erweitern, wurde eine große Modulsammlung vorbereitet, in der Sie Module mit der Implementierung von HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-Servern und -Clients sowie Module zur Integration finden mit verschiedenen Web-Frameworks, WebSocket- und Ajax-Handlern, DBMS-Konnektoren (MySQL, PostgreSQL, SQLite, MongoDB), Templating-Engines, CSS-Engines, Implementierungen von Kryptoalgorithmen und Autorisierungssystemen (OAuth), XML-Parsern.

Um die Verarbeitung einer großen Anzahl paralleler Anfragen sicherzustellen, verwendet Node.js ein asynchrones Codeausführungsmodell, das auf nicht blockierender Ereignisbehandlung und der Definition von Callback-Handlern basiert. Unterstützte Methoden zum Multiplexen von Verbindungen sind epoll, kqueue, /dev/poll und select. Für das Verbindungsmultiplexing wird die libuv-Bibliothek verwendet, die ein Add-on für libev auf Unix-Systemen und IOCP auf Windows ist. Die libeio-Bibliothek wird zum Erstellen eines Thread-Pools verwendet und c-ares ist integriert, um DNS-Abfragen im nicht blockierenden Modus durchzuführen. Alle Systemaufrufe, die eine Blockierung verursachen, werden innerhalb des Thread-Pools ausgeführt und übertragen dann wie Signalhandler das Ergebnis ihrer Arbeit über eine unbenannte Pipe (Pipe) zurück. Die Ausführung von JavaScript-Code erfolgt durch die Verwendung der von Google entwickelten V8-Engine (zusätzlich entwickelt Microsoft eine Version von Node.js mit der Chakra-Core-Engine).

Im Kern ähnelt Node.js den Perl AnyEvent-, Ruby Event Machine-, Python Twisted-Frameworks und der Tcl-Ereignisimplementierung, aber die Ereignisschleife in Node.js bleibt dem Entwickler verborgen und ähnelt der Ereignisbehandlung in einer laufenden Webanwendung im Browser. Beim Schreiben von Anwendungen für node.js müssen Sie beispielsweise die Besonderheiten der ereignisgesteuerten Programmierung berücksichtigen, anstatt „var result = db.query(“select..“);“ auszuführen. Beim Warten auf den Abschluss der Arbeit und der anschließenden Verarbeitung der Ergebnisse verwendet Node.js das Prinzip der asynchronen Ausführung, d. h. Der Code wird in „db.query(“select..“, function (result) {result processing});“ umgewandelt, wobei die Kontrolle sofort an weiteren Code übergeben wird und das Abfrageergebnis verarbeitet wird, sobald Daten eintreffen.

Source: opennet.ru

Kommentar hinzufügen