Die serverseitige JavaScript-Plattform Node.js 18.0 ist jetzt verfügbar.

Node.js 18.0 wurde veröffentlicht, eine Plattform zur Ausführung von Netzwerk-Anwendungen in JavaScript. Node.js 18.0 wird als Long Term Support-Version (LTS) eingestuft, dieser Status wird jedoch erst im Oktober nach der Stabilisierung zugewiesen. Der Support für Node.js 18.x wird bis April 2025 bereitgestellt. Der Support der vorherigen LTS-Version Node.js 16.x wird bis April 2024 fortgesetzt, während die ältere LTS-Version 14.x bis April 2023 unterstützt wird. Der Support für die LTS-Version 12.x endet am 30. April, und die Übergangsversion Node.js 17.x wird bis zum 1. Juni unterstützt.

Wesentliche Verbesserungen:

  • Die V8-Engine wurde auf Version 10.1 aktualisiert, die in Chromium 101 verwendet wird. Im Vergleich zur Veröffentlichung von Node.js 17.9.0 gibt es jetzt Support für Funktionen wie findLast und findLastIndex, um Elemente am Ende eines Arrays zu suchen sowie die Funktion Intl.supportedValuesOf. Die API Intl.Locale wurde verbessert, und die Initialisierung von Klassenfeldern und privaten Methoden wurde beschleunigt.
  • Standardmäßig ist die experimentelle API fetch() aktiviert, die für das Laden von Ressourcen über das Netzwerk gedacht ist. Die Implementierung basiert auf dem Code des HTTP/1.1-Clients und ist so nah wie möglich an einer ähnlichen API, die von Browsern bereitgestellt wird. Dazu gehört die Unterstützung von Schnittstellen wie FormData, Headers, Request und Response, um HTTP-Header von Anfragen und Antworten zu manipulieren. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Die experimentelle Implementierung der API Web Streams wurde hinzugefügt, die Zugriff auf Datenströme ermöglicht, die über das Netzwerk bezogen werden. Die API erlaubt es, eigene Handler hinzuzufügen, um mit den Daten zu arbeiten, während sie empfangen werden, ohne auf den vollständigen Datei-Download zu warten. In Node.js sind jetzt Objekte wie ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream und DecompressionStream verfügbar.
  • Die stabile API Blob wurde übersetzt, die es ermöglicht, unveränderliche Rohdaten zu kapseln, um sie sicher in verschiedenen Arbeitsabläufen zu verwenden.
  • Die stabile API BroadcastChannel wurde implementiert, die asynchrones Messaging im Format „ein Sender – viele Empfänger“ ermöglicht.
  • Ein experimentelles Modul node:test wurde hinzugefügt, um Tests in JavaScript zu erstellen und auszuführen, die Ergebnisse im TAP-Format (Test Anything Protocol) zurückgeben.
  • Fertige Builds 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+ wurden bereitgestellt. Aufgrund von Problemen beim Build des V8-Engines werden 32-Bit-Builds für Windows vorübergehend eingestellt.
  • Eine experimentelle Möglichkeit wurde bereitgestellt, eine ausführbare Datei von Node.js mit vom Nutzer ausgewählten Komponenten zu erstellen, die beim Start initialisiert werden. Um die Startkomponenten im Build-Skript configure zu bestimmen, wurde die Option „—node-snapshot-main“ hinzugefügt, zum Beispiel „./configure —node-snapshot-main=marked.js; name node“.

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