Die Server-JavaScript-Plattform Node.js 21.0 ist verfügbar

Die Veröffentlichung von Node.js 21.0, einer Plattform zur Ausführung von Webanwendungen in JavaScript, wurde durchgeführt. Der Support für die Version Node.js 21.0 wird für 6 Monate bereitgestellt. In den kommenden Tagen wird die Stabilisierung der Version Node.js 20 abgeschlossen, die dann den Status LTS erhält und bis April 2026 unterstützt wird. Der Support der vorherigen LTS-Version Node.js 18.0 wird bis September 2025 fortgesetzt, und der vorletzten LTS-Version 16.0 bis April 2024.

Wesentliche Verbesserungen:

  • Das stabile Fetch-API wurde angekündigt, das für das Laden von Netzwerkressourcen vorgesehen ist und die Erstellung universellen JavaScript-Codes erleichtert, der sowohl serverseitig als auch clientseitig funktioniert. Die Implementierung basiert auf dem Code des HTTP/1.1-Clients und ist so nah wie möglich am ähnlichen API, das in Browsern bereitgestellt wird. Das API umfasst die Methode fetch() und die Objekte Headers, Request und Response, die die HTTP-Header, die Anfrage und die Antwort darstellen. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Die Unterstützung für die WebStreams API wurde stabilisiert, die den Zugriff auf Datenströme ermöglicht, die über das Netzwerk empfangen werden. Die API erlaubt es, eigene Handler hinzuzufügen, die mit den Daten arbeiten, sobald sie über das Netzwerk eingehen, ohne auf den vollständigen Datei-Download warten zu müssen. In Node.js sind Objekte wie ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream und DecompressionStream verfügbar.
  • Eine experimentelle Implementierung eines WebSocket-Clients wurde hinzugefügt, kompatibel mit Browsern. Um die WebSocket-Unterstützung zu aktivieren, ist das Flag „—experimental-websocket“ vorgesehen.
  • Ein experimenteller Standardmodus zur Verwendung von JavaScript-Modulen ESM (ECMAScript-Module, die in Browser-Modulen verwendet werden) anstelle von CommonJS (spezifisch für Node.js) wurde hinzugefügt. Diese Änderung betrifft keine Module, deren Format eindeutig über das Feld „type“ in der package.json definiert ist, über das Flag „—input-type“ zugewiesen wurde oder aufgrund der Dateierweiterung offensichtlich ist (.mjs für ESM, .cjs für CommonJS). Dabei werden Module, die nicht ausdrücklich als CommonJS definiert sind (z. B. die die Erweiterung „.js“ haben), im neuen Modus als ESM-Module interpretiert. Zur Aktivierung der neuen Modul-Einstellungen wird das Flag „—experimental-default-type“ vorgeschlagen.
  • Die V8-Engine wurde auf Version 11.8 aktualisiert, die in Chromium 118 verwendet wird. Sie unterstützt jetzt die Methode ArrayBuffer.prototype.transfer, die Gruppierung von Arrays (Methode groupBy) und WebAssembly-Instruktionen für die Verarbeitung von Konstanten (i32.add, i32.sub, i32.mul, i64.add, i64.sub und i64.mul).
  • Die Unterstützung des Handlers globalPreload wurde eingestellt. Stattdessen sollten zur Konfiguration der Module die Aufrufe register und initialize verwendet werden.
  • In die Funktion fs.writeFile wurde die Option „flush“ hinzugefügt, um die Daten nach jedem Schreibvorgang gezielt auf das Speichermedium zu schreiben.
  • Die Performance des Codes, der mit URL-Parsing, API fetch, Streams, node:fs und HTTP verbunden ist, wurde verbessert.
  • Ein globales Objekt navigator wurde hinzugefügt. Zum Beispiel kann das Attribut navigator.hardwareConcurrency verwendet werden, um Informationen über die Anzahl der CPU-Kerne zu erhalten.
  • Im Parameter „—test“ wurde die Unterstützung von Glob-Masken hinzugefügt, um auswählbare Tests auszuführen (zum Beispiel kann „—test **/*.test.js“ angegeben werden).
  • Der im Bundle enthaltene Paketmanager npm 10.2.0 und der Parser llhttp 9.1.2 wurden aktualisiert.
  • Die Unterstützung für Visual Studio 2019 und macOS-Versionen älter als 11.0 wurde eingestellt.

Die Node.js-Plattform kann sowohl für die serverseitige Unterstützung von Webanwendungen als auch für die Entwicklung herkömmlicher Client- und Server-Netzwerkprogramme genutzt werden. Für die Erweiterung der Funktionalität von Node.js-Anwendungen steht eine umfangreiche Sammlung von Modulen zur Verfügung, die Module mit Implementierungen bereitstellt, 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 Kryptografie-Algorithmen und Authentifizierungssystemen (OAuth), XML-Parser.

Um eine große Anzahl paralleler Anfragen zu verarbeiten, verwendet Node.js ein asynchrones Codeausführungsmodell, das auf der Verarbeitung von Ereignissen im Nicht-Blockierungsmodus und der Definition von Callback-Handlern basiert. Zu den Methoden der Verbindungsmultiplexierung gehören Techniken wie epoll, kqueue, /dev/poll und select. Für die Verbindungs multiplexierung verwendet Node.js die Bibliothek libuv, die eine Erweiterung von libev in Unix-Systemen und von IOCP in Windows darstellt. Zum Erstellen eines Thread-Pools wird die Bibliothek libeio verwendet, und für die nicht-blockierenden DNS-Abfragen ist c-ares integriert. Alle systemaufrufenden Blockierungen werden innerhalb des Thread-Pools ausgeführt und über ein anonymes Pipe zurückgegeben, ähnlich wie Signal-Handler, die die Ergebnisse ihrer Arbeit übermitteln. Die Ausführung von JavaScript-Code erfolgt durch die Nutzung der von Google entwickelten V8-Engine (zusätzlich entwickelt Microsoft eine Version von Node.js mit der Chakra-Core-Engine).

Node.js ähnelt in seiner Funktionalität den Frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted und der Ereignisimplementierung in Tcl. Der Event-Loop in Node.js ist jedoch für den Entwickler nicht sichtbar und erinnert an die Ereignisverarbeitung in einer Webanwendung, die im Browser läuft. Bei der Entwicklung von Anwendungen für Node.js muss man die Besonderheiten der ereignisgesteuerten Programmierung berücksichtigen. Anstatt den Code wie «var result = db.query(«select..»);» zu schreiben und auf das Ende der Bearbeitung zu warten, verwendet Node.js das Prinzip der asynchronen Ausführung. Dies bedeutet, dass der Code in «db.query(«select..», function (result) { Ergebnisverarbeitung });» umgewandelt wird. Dabei wird die Kontrolle sofort an den nachfolgenden Code übergeben, während das Ergebnis des Abfrage mit dem Eintreffen der Daten verarbeitet wird.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster