Die Version 19.0 von Node.js wurde veröffentlicht, einer Plattform für die Ausführung von Netzwerkanwendungen in JavaScript. Node.js 19 gehört zum regulären Support-Zweig, für den Updates bis Juni 2023 bereitgestellt werden. In den kommenden Tagen wird die Stabilisierung des Zweigs Node.js 18 abgeschlossen, der den LTS-Status (Long Term Support) erhalten wird und bis April 2025 unterstützt wird. Die Unterstützung der vorherigen LTS-Version Node.js 16.0 wird bis September 2023 fortgesetzt, und die ältere LTS-Version 14.0 wird bis April 2023 unterstützt.
Wesentliche Verbesserungen:
- Die V8-Engine wurde auf Version 10.7 aktualisiert, die in Chromium 107 verwendet wird. Zu den Änderungen in der Engine im Vergleich zur Version Node.js 18 gehören die Implementierung der dritten API-Version Intl.NumberFormat, die neue Funktionen wie formatRange(), formatRangeToParts() und selectRange() umfasst, sowie die Gruppierung von Mengen, neue Optionen für das Runden und die Festlegung der Genauigkeit. Zudem wurden die Abhängigkeiten llhttp 8.1.0 und npm 8.19.2 aktualisiert.
- Das experimentelle Kommando „node —watch“ wurde eingeführt, um einen Überwachungsmodus zu realisieren, der den Prozess beim Ändern einer importierten Datei neu startet (zum Beispiel wird der Prozess automatisch neu gestartet, wenn „node —watch index.js“ ausgeführt wird und sich index.js ändert).
- Für alle ausgehenden HTTP/HTTPS-Verbindungen ist die Unterstützung des HTTP 1.1 Keep-Alive-Mechanismus aktiviert, der die Verbindung für eine bestimmte Zeit offen lässt, um mehrere HTTP-Anfragen über eine einzige Verbindung zu bearbeiten. Es wird angenommen, dass die Verwendung von Keep-Alive die Durchsatzrate und Leistung verbessert. Standardmäßig beträgt das Timeout für das Offenhalten der Verbindung 5 Sekunden. In die Implementierung des HTTP-Clients wurde die Unterstützung für das Parsen des Keep-Alive-HTTP-Headers in den Antworten aufgenommen. Server, während in die Implementierung des Node.js HTTP-Servers die automatisierte Trennung inaktiver Clients, die Keep-Alive verwenden, integriert wurde.
- Die WebCrypto-API wurde stabilisiert, mit Ausnahme der Funktionen, die Ed25519-, Ed448-, X25519- und X448-Algorithmen verwenden. Auf das WebCrypto-Modul kann jetzt über globalThis.crypto oder require('node:crypto').webcrypto zugegriffen werden.
- Die Unterstützung für die Trace-Tools DTrace, SystemTap und ETW (Event Tracing for Windows) wurde eingestellt, da deren Pflege als unpraktisch angesehen wird, insbesondere aufgrund der Komplexität der aktuellen Wartung ohne einen geeigneten Unterstützungsplan.
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
