Serverseitige JavaScript-Plattform Node.js 18.0 verfügbar

Node.js 18.0 wurde veröffentlicht, eine Plattform zum Ausführen von Netzwerkanwendungen in JavaScript. Node.js 18.0 wird als Langzeit-Support-Zweig eingestuft, dieser Status wird jedoch erst im Oktober nach der Stabilisierung zugewiesen. Node.js 18.x wird bis April 2025 unterstützt. Die Wartung des vorherigen LTS-Zweigs von Node.js 16.x dauert bis April 2024 und des vorletzten LTS-Zweigs 14.x bis April 2023. Der 12.x LTS-Zweig wird am 30. April eingestellt und der Node.js 17.x-Staging-Zweig wird am 1. Juni eingestellt.

Wichtigste Verbesserungen:

  • Die V8-Engine wurde auf Version 10.1 aktualisiert, die in Chromium 101 verwendet wird. Im Vergleich zur Version 17.9.0 von Node.js gibt es jetzt Unterstützung für Funktionen wie die Methoden findLast und findLastIndex zum Suchen von Elementen relativ zum Ende von ein Array und die Funktion Intl.supportedValuesOf. Verbesserte Intl.Locale-API. Die Initialisierung von Klassenfeldern und privaten Methoden wurde beschleunigt.
  • Die experimentelle fetch()-API ist standardmäßig aktiviert und dient zum Laden von Ressourcen über das Netzwerk. 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. Dazu gehört die Unterstützung der FormData-, Headers-, Request- und Response-Schnittstellen zur Bearbeitung von HTTP-Anfrage- und Antwortheadern. const res = waiting fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = waiting res.json(); console.log(data); }
  • Es wurde eine experimentelle Implementierung der Web Streams API hinzugefügt, die Zugriff auf über das Netzwerk empfangene Datenströme ermöglicht. Mit der API ist es möglich, eigene Handler hinzuzufügen, um mit Daten zu arbeiten, sobald Informationen über das Netzwerk eingehen, ohne auf den Download der gesamten Datei warten zu müssen. Zu den Objekten, die jetzt in Node.js verfügbar sind, gehören ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream und DecompressionStream.
  • Die Blob-API wurde auf „stable“ verschoben, sodass Sie unveränderliche Rohdaten zur sicheren Verwendung in verschiedenen Arbeitsthreads kapseln können.
  • Die BroadcastChannel-API wurde stabilisiert, sodass Sie den Austausch von Nachrichten im asynchronen Modus im Format „Ein Absender – viele Empfänger“ organisieren können.
  • Experimentelles Modul node:test zum Erstellen und Ausführen von Tests in JavaScript hinzugefügt, die Ergebnisse im TAP-Format (Test Anything Protocol) zurückgeben.
  • Die Generierung vorgefertigter Assemblys für Red Hat Enterprise Linux (RHEL) 8 und andere Distributionen auf Basis von Glibc 2.28+, einschließlich Debian 10 und Ubuntu 20.04, sowie für macOS 10.15+ wird bereitgestellt. Aufgrund von Problemen mit dem V8-Engine-Build wurde die Erstellung von 32-Bit-Builds für Windows vorübergehend gestoppt.
  • Bereitstellung einer experimentellen Option zum Erstellen einer ausführbaren Node.js-Datei mit vom Benutzer ausgewählten Komponenten, die beim Start initialisiert werden. Um die Startkomponenten zu definieren, wurde die Option „--node-snapshot-main“ zum Build-Konfigurationsskript hinzugefügt, zum Beispiel „./configure –node-snapshot-main=marked.js; Namensknoten"

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