Serverseitige JavaScript-Plattform Node.js 19.0 verfügbar

Node.js 19.0, eine Plattform zum Ausführen von Netzwerkanwendungen in JavaScript, wurde veröffentlicht. Node.js 19 ist ein regulärer Supportzweig mit Updates, die bis Juni 2023 verfügbar sind. In den kommenden Tagen wird die Stabilisierung des Node.js 18-Zweigs abgeschlossen, der den LTS-Status erhält und bis April 2025 unterstützt wird. Die Wartung des vorherigen LTS-Zweigs von Node.js 16.0 dauert bis September 2023 und des vorletzten LTS-Zweigs 14.0 bis April 2023.

Wichtigste Verbesserungen:

  • Die V8-Engine wurde auf Version 10.7 aktualisiert, die in Chromium 107 verwendet wird. Zu den Änderungen in der Engine im Vergleich zum Node.js 18-Zweig gehört die Implementierung der dritten Version der Intl.NumberFormat-API, die neue Funktionen formatRange hinzufügt (), formatRangeToParts() und selectRange(), Gruppierung von Mengen, neue Optionen zum Runden und Festlegen der Genauigkeit, die Möglichkeit, Zeichenfolgen als Dezimalzahlen zu interpretieren. Die enthaltenen Abhängigkeiten llhttp 8.1.0 und npm 8.19.2 wurden ebenfalls aktualisiert.
  • Es wurde ein experimenteller Befehl „node -watch“ mit der Implementierung eines Überwachungsmodus vorgeschlagen, der sicherstellt, dass der Prozess neu gestartet wird, wenn sich die importierte Datei ändert (wenn beispielsweise „node -watch index.js“ ausgeführt wird, wird der Prozess neu gestartet automatisch neu gestartet, wenn 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 innerhalb derselben Verbindung zu verarbeiten. Keep-Alive soll den Durchsatz und die Leistung verbessern. Standardmäßig ist das Zeitlimit für das Öffnen der Verbindung auf 5 Sekunden eingestellt. Der HTTP-Client-Implementierung wurde Unterstützung für das Parsen des Keep-Alive-HTTP-Headers in Serverantworten hinzugefügt, und der Node.js-HTTP-Server-Implementierung wurde die automatische Trennung inaktiver Clients mithilfe von Keep-Alive hinzugefügt.
  • Die WebCrypto-API wurde in die stabile Kategorie überführt, mit Ausnahme von Funktionen, die die Algorithmen Ed25519, Ed448, X25519 und X448 verwenden. Um auf das WebCrypto-Modul zuzugreifen, können Sie jetzt globalThis.crypto oder require('node:crypto').webcrypto verwenden.
  • Die Unterstützung für die Ablaufverfolgungstools DTrace, SystemTap und ETW (Event Tracing for Windows) wurde entfernt, deren Wartung aufgrund der Komplexität der Aktualisierung auf dem neuesten Stand ohne ordnungsgemäßen Supportplan als unangemessen angesehen wurde.

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