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

Die neue Version Node.js 20.0 wurde veröffentlicht, die eine Plattform für das Ausführen von Netzwerkapplikationen in JavaScript darstellt. Node.js 20.0 gehört zu den Long-Term Support (LTS) Branches, dieser Status wird jedoch erst im Oktober nach der Stabilisierung vergeben. Die Unterstützung für Node.js 20.x wird bis zum 30. April 2026 bereitgestellt. Die Unterstützung der vorherigen LTS-Version Node.js 18.x wird bis April 2025 dauern, während die LTS-Version 16.x bis September 2023 unterstützt wird. Die Unterstützung der LTS-Version 14.x wird am 30. April eingestellt, und die Interim-Version Node.js 19.x am 1. Juni.

Wesentliche Verbesserungen:

  • Die V8-Engine wurde auf Version 11.3 aktualisiert, die in Chromium 113 Verwendung findet. Im Vergleich zu Node.js 19, das die Engine Chromium 107 verwendete, wurden Funktionen wie String.prototype.isWellFormed und toWellFormed, Methoden von Array.prototype und TypedArray.prototype zur Arbeit mit einer Kopie bei Änderungen von Array- und TypedArray-Objekten, das Flag „v“ in RegExp, die Unterstützung für die Größenänderung von ArrayBuffer sowie die Erweiterung von SharedArrayBuffer und die Unterstützung der Tail-Call-Rekursion in WebAssembly hinzugefügt.
  • Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js

    Zur Zugangskontrolle wird empfohlen, die Methode process.permission.has() zu verwenden, beispielsweise „process.permission.has(‘fs.write’, '/tmp/test’)“.

  • Die ECMAScript-Modul-Handler (ESM), die über die Option «—experimental-loader» geladen werden, werden jetzt in einem separaten Thread ausgeführt, der vom Hauptthread isoliert ist. Dadurch wird eine Überlappung des Anwendungscodes mit den geladenen ESM-Modulen ausgeschlossen. Ähnlich wie in Browsern wird die Methode import.meta.resolve(), wenn sie aus der Anwendung aufgerufen wird, nun synchron ausgeführt. In einer der nächsten Node.js-Versionen ist geplant, die Unterstützung für das Laden von ESM in den stabilen Bereich zu überführen.
  • Das Modul node:test (test_runner), das zur Erstellung und Ausführung von Tests in JavaScript dient und Ergebnisse im TAP-Format (Test Anything Protocol) zurückgibt, wurde nun in den stabilen Status übernommen.
  • Ein eigenes Entwicklerteam wurde gebildet, das für die Leistungsoptimierung verantwortlich ist. Bei der Vorbereitung eines neuen Branches wurde an der Beschleunigung verschiedener Runtime-Komponenten gearbeitet, darunter die URL-Parsing, fetch() und EventTarget. So wurden die Overheads bei der Initialisierung von EventTarget halbiert, die Leistung der Methode URL.canParse() erheblich gesteigert und die Effizienz der Timer verbessert. Zudem wurde ein hochleistungsfähiger URL-Parser — Ada 2.0, geschrieben in C++, eingeführt.
  • Die Entwicklung der experimentellen Möglichkeit zur Bereitstellung von Anwendungen in Form einer einzigen ausführbaren Datei (SEA, Single Executable Applications) wurde fortgesetzt. Die Erstellung der ausführbaren Datei erfordert jetzt die Einfügung eines BLOBs, das auf der Konfigurationsdatei im JSON-Format basiert (anstatt eines JavaScript-Files).
  • Die Kompatibilität der Web Crypto API mit Implementierungen anderer Projekte wurde verbessert.
  • Die offizielle Unterstützung für Windows auf ARM64-Systemen wurde hinzugefügt.
  • Die Unterstützung von WASI-Erweiterungen (WebAssembly System Interface) zur Erstellung isolierter WebAssembly-Anwendungen wurde weitergeführt. Die Notwendigkeit, ein spezielles Kommandozeilenflag zur Aktivierung der WASI-Unterstützung anzugeben, wurde aufgehoben.

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-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster