Release , eine Plattform zur Ausführung von Netzwerkapplikationen in JavaScript. Node.js 14.0 gehört zu den LTS-Zweigen, wird diesen Status jedoch erst im Oktober erhalten, nach Abschluss der Stabilisierung. Der Support für Node.js 14.0 wird bis April 2023. Die Wartung des vorherigen LTS-Zweigs Node.js 12.0 wird bis April 2022 dauern, der vorletzte LTS-Zweig 10.0 bis April 2021. Der Support für den Zwischenzweig 13.x endet im Juni dieses Jahres.
Haupt- :
- Die Möglichkeit der On-Demand- oder ereignisgesteuerten Generierung von , in denen Ereignisse dokumentiert werden, die bei der Diagnose von Problemen wie Abstürzen, Leistungsabfällen, Speicherlecks, hoher CPU-Auslastung, unerwarteten Fehlermeldungen usw. helfen.
- Experimentelle Unterstützung für die API mit der Implementierung der Klasse AsyncLocalStorage, die zur Erstellung eines asynchronen Zustands mit Callback-Handlern und Promises verwendet werden kann. AsyncLocalStorage ermöglicht das Speichern von Daten während der Verarbeitung von Web-Anfragen, ähnlich wie Thread-Local Storage in anderen Sprachen.
- Die Warnmeldung zur experimentellen Funktion beim Laden wird durch Import- und Exportausdrücke eingebunden und exportiert. Dabei bleibt die Implementierung der ESM-Module noch experimentell.
- Die V8-Engine wurde auf die Version (, , ), in der neue Leistungsoptimierungen vorgenommen wurden und Neuerungen wie der neue logische Operator „??“ (gibt den rechten Operand zurück, falls der linke Operand NULL oder undefined hat, und umgekehrt), der Operator „?.“ zur gleichzeitigen Überprüfung einer gesamten Eigenschafts- oder Methoden-Kette (z. B. „db?.user?.name?.length“ ohne vorherige Prüfungen), die Methode Intl.DisplayName zur Ermittlung lokalisierter Namen usw. hinzugefügt wurden.
- Eine Überprüfung der API Streams wurde durchgeführt, die darauf abzielt, die Konsistenz der API-Schnittstellen von Streams zu verbessern und Unterschiede im Verhalten der Basiskomponenten von Node.js zu beseitigen. Beispielsweise wurde das Verhalten von http.OutgoingMessage an stream.Writable angenähert und net.Socket an stream.Duplex. Die Option autoDestroy ist standardmäßig auf „true“ festgelegt, was bedeutet, dass „_destroy“ nach dem Abschluss aufgerufen wird.
- Experimentelle Unterstützung für die API (), das Programmierschnittstellen für die direkte Interaktion mit dem Betriebssystem bereitstellt (POSIX-API zur Arbeit mit Dateien, Sockets usw.).
- Die Anforderungen an von Compilern und Plattformen wurden erhöht: macOS 10.13 (High Sierra), GCC 6, .
Wir erinnern daran, dass die Node.js-Plattform sowohl für die serverseitige Unterstützung von Webanwendungen als auch für die Erstellung regulärer clientseitiger und serverseitiger Netzwerkprogramme genutzt werden kann. Für die Erweiterung der Funktionalität von Anwendungen für Node.js steht eine umfangreiche , in der Module für die Implementierung von HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-Servern und -klienten zu finden sind, Module für die Integration mit verschiedenen Web-Frameworks, WebSocket- und Ajax-Handler, Datenbankverbindungen (MySQL, PostgreSQL, SQLite, MongoDB), Template-Engines, CSS-Engines, Implementierungen von Krypto-Algorithmen und Autorisierungssystemen (OAuth), XML-Parser.
Um eine große Anzahl paralleler Anfragen zu verarbeiten, verwendet Node.js ein asynchrones Code-Ausführungsmodell, das auf einem nicht-blockierenden Ereignisverarbeitungsansatz und der Definition von Callback-Handlern basiert. Unterstützte Multiplexierungsverfahren sind unter anderem epoll, kqueue, /dev/poll und select. Für die Multiplexierung von Verbindungen wird die Bibliothek verwendet, , die eine Erweiterung über in Unix-Systemen und über IOCP in Windows darstellt. Für die Erstellung eines Thread-Pools wird die Bibliothek , zur Ausführung von DNS-Anfragen im nicht-blockierenden Modus integriert, . Alle systematischen Aufrufe, die eine Blockierung hervorrufen, werden innerhalb des Thread-Pools ausgeführt und über ein benanntes Rohr (pipe) an die Callback-Handler zurückgegeben. Die Ausführung von JavaScript-Code erfolgt über die Verwendung der von Google entwickelten Engine (darüber hinaus entwickelt Microsoft eine Variante von Node.js mit der Engine Chakra-Core).
Im Grunde genommen ähnelt Node.js den Frameworks , , und Ereignissen in Tcl, aber die Ereignisschleife (event loop) in Node.js ist für den Entwickler verborgen und ähnelt der Ereignisverarbeitung in einer Webanwendung, die im Browser läuft. Bei der Erstellung von Anwendungen für Node.js ist es wichtig, die Besonderheiten der ereignisorientierten Programmierung zu berücksichtigen. Anstelle von „var result = db.query(„select..“);“ mit Erwartung auf die Fertigstellung und anschließender Ergebnisverarbeitung verwendet Node.js den Ansatz der asynchronen Ausführung, d.h. der Code wird zu „db.query(„select..“, function (result) {Ergebnisverarbeitung});“ transformiert, bei dem die Kontrolle sofort an den nachfolgenden Code übergeben wird, und das Ergebnis der Anfrage wird verarbeitet, sobald die Daten verfügbar sind.
Quelle: opennet.ru
