Serverseitige JavaScript-Version Node.js 16.0

Node.js 16.0 wurde veröffentlicht, eine Plattform zum Ausführen von Netzwerkanwendungen in JavaScript. Node.js 16.0 wird als Langzeit-Support-Zweig eingestuft, dieser Status wird jedoch erst im Oktober nach der Stabilisierung zugewiesen. Node.js 16.0 wird bis April 2023 unterstützt. Die Wartung des vorherigen LTS-Zweigs von Node.js 14.0 dauert bis April 2023 und des vorletzten LTS-Zweigs 12.0 bis April 2022. Der Support für den 10.0 LTS-Zweig wird in 10 Tagen eingestellt.

Wichtigste Verbesserungen:

  • Die V8-Engine wurde auf Version 9.0 aktualisiert (Node.js 15 verwendete Version 8.6), was die Implementierung von Funktionen wie der „indices“-Eigenschaft für reguläre Ausdrücke ermöglicht (einschließlich eines Arrays mit den Start- und Endpositionen von Übereinstimmungsgruppen). , die Atomics-Methode in Node.js 16 .waitAsync (asynchrone Version von Atomics.wait), Unterstützung für die Verwendung des Schlüsselworts „await“ in Modulen der obersten Ebene. Funktionsaufrufe wurden in Situationen beschleunigt, in denen die Anzahl der übergebenen Argumente nicht den in der Funktion definierten Parametern entspricht.
  • Die Timers Promises API wurde stabilisiert und bietet einen alternativen Satz von Funktionen für die Arbeit mit Timern, die Promise-Objekte als Ausgabe zurückgeben, wodurch die Verwendung von util.promisify() überflüssig wird. import { setTimeout } aus 'timers/promises'; asynchrone Funktion run() { waiting setTimeout(5000); console.log('Hallo Welt!'); } laufen();
  • Es wurde eine experimentelle Implementierung der Web Crypto API hinzugefügt, die darauf ausgelegt ist, grundlegende kryptografische Vorgänge auf der Seite von Webanwendungen durchzuführen, wie z. B. die Bearbeitung kryptografischer Hashes, die Generierung und Überprüfung digitaler Signaturen, die Kodierung und Dekodierung von Daten mithilfe verschiedener Verschlüsselungsmethoden und die Generierung kryptografisch sicherer Daten zufällige Zahlen. Die API stellt außerdem Funktionen zur Generierung und Verwaltung von Schlüsseln bereit.
  • N-API (API zur Entwicklung von Add-ons) wurde auf Version 8 aktualisiert.
  • Der Übergang zum neuen Release des Paketmanagers NPM 7.10 ist erfolgt.
  • Die Implementierung der AbortController-Klasse wurde stabilisiert, die auf der AbortController-Web-API basiert und das Abbrechen von Signalen in ausgewählten Promise-basierten APIs ermöglicht.
  • Die Unterstützung für die dritte Version des Source Map-Formats, das zum Vergleich generierter, verarbeiteter oder gepackter Module mit dem ursprünglichen Quellcode verwendet wird, wurde stabilisiert.
  • Aus Gründen der Kompatibilität mit älteren Web-APIs wurden die Methoden buffer.atob(data) und buffer.btoa(data) hinzugefügt.
  • Die Bildung von Baugruppen für neue Apple-Geräte, die mit dem M1-ARM-Chip ausgestattet sind, hat begonnen.
  • Auf der Linux-Plattform wurden die Anforderungen an die Compilerversion auf GCC 8.3 angehoben.

Denken Sie daran, dass die Node.js-Plattform sowohl für die Serverwartung von Webanwendungen als auch für die Erstellung gewöhnlicher Client- und Server-Netzwerkprogramme verwendet werden kann. 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.

Darüber hinaus ist anzumerken, dass das Unternehmen Deno, das vom Erfinder von Node.js zur Entwicklung der Deno-Plattform der nächsten Generation gegründet wurde, Investitionen in Höhe von 4.9 Millionen US-Dollar erhalten hat. In seinem Zweck ähnelt Deno Node.js, versucht jedoch, die konzeptionellen Fehler in der Node.js-Architektur zu beseitigen und Benutzern eine sicherere Umgebung zu bieten. Es wird darauf hingewiesen, dass die Geschäftslösungen von Deno auf vollständig offenen Produkten basieren werden und das Open-Core-Modell mit separaten kostenpflichtigen Funktionen für die Deno-Plattform als inakzeptabel angesehen wird.

Source: opennet.ru

Kommentar hinzufügen