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

Die Veröffentlichung von Node.js 19.0, der Plattform für die Ausführung von Netzwerk-Anwendungen in JavaScript, hat stattgefunden. Node.js 19 gehört zu dem Branch mit regulärer Supportdauer, für den Updates bis Juni 2023 herausgegeben werden. In den nächsten Tagen wird die Stabilisierung des Branches Node.js 18 abgeschlossen, der den LTS-Status (Long-Term Support) erhalten wird und bis April 2025 unterstützt wird. Die Unterstützung des vorherigen LTS-Branches Node.js 16.0 wird bis September 2023 fortgesetzt, und die des davor liegenden LTS-Branches 14.0 bis April 2023.

Hauptverbesserungen:

  • Die V8-Engine wurde auf Version 10.7 aktualisiert, die in Chromium 107 verwendet wird. Zu den Änderungen in der Engine im Vergleich zu Node.js 18 gehört die Implementierung der dritten Version der API Intl.NumberFormat, die neue Funktionen wie formatRange(), formatRangeToParts() und selectRange() sowie die Gruppierung von Mengen, neue Rundungsoptionen und die Möglichkeit zur Interpretation von Zeichenfolgen als Dezimalzahlen enthält. Auch die im Paket enthaltenen Abhängigkeiten llhttp 8.1.0 und npm 8.19.2 wurden aktualisiert.
  • Ein experimenteller Befehl «node —watch» wurde vorgeschlagen, der einen Überwachungsmodus implementiert, der den Prozess bei Änderungen an der importierten Datei neu startet (zum Beispiel wird bei der Ausführung von «node —watch index.js» der Prozess automatisch neu gestartet, wenn sich index.js ändert).
  • Für alle ausgehenden HTTP/HTTPS-Verbindungen wurde die Unterstützung für den HTTP 1.1 Keep-Alive-Mechanismus aktiviert, der die Verbindung eine bestimmte Zeit offen hält, um mehrere HTTP-Anfragen über eine einzige Verbindung zu bearbeiten. Es wird erwartet, dass die Anwendung von Keep-Alive die Bandbreite und Leistung erhöht. Der Standard-Timeout für das Offenhalten der Verbindung beträgt 5 Sekunden. In die Implementierung des HTTP-Clients wurde die Unterstützung für das Parsen des HTTP-Header-Elements Keep-Alive in Antworten hinzugefügt, Server, und in die Implementierung des Node.js HTTP-Servers wurde die automatische Trennung inaktiver Clients, die Keep-Alive verwenden, hinzugefügt.
  • Die WebCrypto-API wurde in den Status stabil überführt, mit Ausnahme der Funktionen, die Algorithmen wie Ed25519, Ed448, X25519 und X448 verwenden. Der Zugriff auf das WebCrypto-Modul kann jetzt über globalThis.crypto oder require(‘node:crypto’).webcrypto erfolgen.
  • Die Unterstützung für die Trace-Tools DTrace, SystemTap und ETW (Event Tracing for Windows) wurde entfernt, da die Aufrechterhaltung als nicht sinnvoll erachtet wird aufgrund der Komplexität der aktuellen Wartung ohne einen angemessenen Unterstützungsplan.

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 der Verarbeitung von Ereignissen im nicht-blockierenden Modus und der Definition von Callback-Handlern basiert. Unterstützt werden Methoden wie epoll, kqueue, /dev/poll und select für das Multiplexen von Verbindungen. Für das Multiplexen von Verbindungen wird die Bibliothek libuv verwendet, die eine Erweiterung von libev in Unix-Systemen und von IOCP in Windows ist. Zur Erstellung eines Thread-Pools wird die Bibliothek libeio verwendet, für die Durchführung von DNS-Anfragen im nicht-blockierenden Modus ist c-ares integriert. Alle systemeigenen Aufrufe, die eine Blockierung verursachen, werden innerhalb des Thread-Pools ausgeführt und über eine unbenannte Pipe das Ergebnis ihrer Arbeit zurückgegeben, ebenso wie Signal-Handler. Die Ausführung von JavaScript-Code erfolgt durch den Einsatz der von Google entwickelten V8-Engine (zuzüglich Microsoft entwickelt 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 Ereignisimplementation in Tcl, jedoch ist die Ereignisschleife (event loop) in Node.js für den Entwickler verborgen und erinnert an die Ereignisverarbeitung in einer Webanwendung, die im Browser läuft. Beim Erstellen von Anwendungen für Node.js muss man die Besonderheiten der ereignisgesteuerten Programmierung berücksichtigen, zum Beispiel anstelle von „var result = db.query(„select..“);“ mit der Erwartung, dass die Ausführung abgeschlossen ist und die Ergebnisse anschließend verarbeitet werden, wird in Node.js das Prinzip der asynchronen Ausführung verwendet, d.h. der Code wird zu „db.query(„select..“, function (result) { Verarbeitung des Ergebnisses });“ umgewandelt, wobei die Kontrolle sofort an den nachfolgenden Code übergeben wird und das Ergebnis der Abfrage bei Erhalt der Daten verarbeitet wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4