Was können Sie 2020 von Node.js erwarten?

Node.js wurde 2019 10 Jahre alt. Die Anzahl der in der npm-Registrierung verfügbaren Pakete hat die 1-Millionen-Marke überschritten. Jedes Jahr steigt das Download-Volumen der Node.js-Plattform selbst um 40%. Ein weiterer Meilenstein für Node.js war, dass dieses Projekt der OpenJS Foundation beigetreten ist. Aufgrund dessen können wir eine Verbesserung des Status und der Stabilität des Projekts sowie allgemein positive Entwicklungen im Bereich der Interaktion zwischen Mitgliedern der JavaScript-Community erwarten.



Es ist leicht zu erkennen, dass in der Welt von Node.js in kurzer Zeit, über ein Jahr, viele interessante Dinge passiert sind. Jedes Jahr gewinnt Node.js an Dynamik. Wir haben im Jahr 2020 keinen Grund, uns auf etwas anderes zu verlassen.

In den nächsten Releases von Node.js finden wir viele interessante Funktionen. Dieses Material widmet sich den wichtigsten Neuerungen der Plattform, die 2020 in ihr erscheinen könnten.

Neuerungen Node.js 13


Anfang Dezember 2019, zum Zeitpunkt des Schreibens dieses Materials, ist Node.js 13 die neueste Version dieser Plattform. Es gibt bereits viele neue Funktionen und Verbesserungen, mit denen Sie experimentieren und sich auf das neue Jahr vorbereiten können. Hier sind einige von ihnen:

  • ECMAScript-Module.
  • WebAssembly-Unterstützung.
  • Diagnoseberichte.
  • Volle Unterstützung für die Internationalisierung. Insbesondere geht es um die Formate Datum, Uhrzeit, Zahlen, Währungen.
  • Unterstützung für das QUIC-Protokoll.
  • Verbesserung der Leistung der V8-JavaScript-Engine.

Bevor wir auf diese Funktionen näher eingehen, werden wir uns mit den Aspekten der Veröffentlichung neuer Versionen von Node.js und der Unterstützung bereits veröffentlichter Versionen der Plattform befassen.

Der Prozess der Veröffentlichung neuer Versionen von Node.js im Jahr 2020


Eine neue Hauptversion von Node.js wird alle 6 Monate veröffentlicht. Einer im Oktober, der andere im April. Sie werden "aktuelle Versionen" genannt. Zum Zeitpunkt des Schreibens dieses Dokuments ist die aktuelle Version von Node.js die 13., die im Oktober 2019 veröffentlicht wurde.

Versionen mit ungeraden Nummern (v9, v11, v13) werden jeden Oktober veröffentlicht. Sie sind für relativ kurze Zeit relevant und gelten nicht als einsatzbereit in der Produktion. Sie können als Beta-Versionen der Plattform betrachtet werden. Sie wurden entwickelt, um neue Funktionen und Änderungen, die in die nächste Version von Node.js fallen, mit einer geraden Nummer zu testen.

Versionen mit geraden Zahlen (v8, v10, v12) werden jeden April veröffentlicht. Nach der Veröffentlichung einer solchen Version wird die Veröffentlichung von Updates für die vorherige "gerade" Version eingestellt. Obwohl diese Versionen viel stabiler sind als die "ungeraden", wird noch weitere 6 Monate aktiv daran gearbeitet. Derzeit können sie als Freigabekandidaten eingestuft werden.

Nachdem die gerade Version innerhalb von 6 Monaten fertiggestellt wurde, tritt sie in eine neue Phase ihres Lebenszyklus ein und verwandelt sich in die LTS-Version (Langzeitunterstützung, Langzeitunterstützung). LTS-Versionen von Node.js gelten als einsatzbereit für die Produktion. In den nächsten 12 Monaten werden Fehlerbehebungen, Sicherheitsupdates und andere Verbesserungen für diese Versionen veröffentlicht. All dies erfolgt unter Berücksichtigung der Erhaltung der Funktionsfähigkeit bestehender Anwendungen.

Nach der LTS-Phase beginnt die Wartungsphase. Derzeit werden nur kritische Fehlerbehebungen und Sicherheitsupdates veröffentlicht. Die Begleitphase dauert 18 Monate. Nach Ablauf dieser Zeit läuft die entsprechende Version bis zum Ende des Lebenszyklus (EOL, End-of-Life) und wird nicht mehr unterstützt.


Node.js Versionslebenszyklus

Der erwartete Release-Plan für neue Versionen von Node.js im Jahr 2020


Im Jahr 2020 können wir den folgenden Plan für die Veröffentlichung neuer Versionen von Node.js erwarten:

Januar-März 2020

  • Die aktuelle Version ist 13.x, es wird aktiv daran gearbeitet.
  • Die Versionen 10.x und 12.x befinden sich im LTS-Status.

April 2020

  • Version 14.x wird aktuell.
  • Die Arbeit an Version 13.x wird kurz nach der Veröffentlichung von 14.x eingestellt.
  • Version 10.x tritt in die Wartungsphase ein.

Oktober 2020

  • Version 15.x wird veröffentlicht, die aktuell wird.
  • Version 14.x tritt in die LTS-Phase ein.
  • Version 12.x geht in die Wartungsphase.


Planen Sie die Veröffentlichung neuer Versionen von Node.js im Jahr 2020

Bitte beachten Sie, dass das Ende des Lebenszyklus von Node.js 8 für Ende 2019 geplant ist. Tatsache ist, dass diese Version der Plattform von OpenSSL-1.0.2 abhängt und der Lebenszyklus dieser Version von OpenSSL ebenfalls Ende 2019 endet. Planen Sie die Migration von Node.js 8.x-Anwendungen auf Node.js 10.x oder 12.x, falls Sie dies noch nicht getan haben.

ECMAScript-Module


In Version 13.2.0 unterstützt Node.js sowohl CommonJS-Module als auch die neuen Standard-ECMAScript-Module (ES-Module), ohne dass Tools von Drittanbietern erforderlich sind. Dies bedeutet, dass Entwickler endlich die import und export , die sie wahrscheinlich bereits beim Erstellen von Front-End-Projekten in JavaScript verwenden. Darüber hinaus ist zu beachten, dass ES-Module in Node.js standardmäßig im strikten Modus arbeiten. Um diesen Modus zu aktivieren, müssen Sie daher nicht am Anfang jeder Datei "use strict"; hinzufügen "use strict"; .

 //  message async function sendMessage { ... } export { sendMessage }; //  index import { sendMessage } from "./message"; 

Um Node.js darüber zu informieren, dass der Entwickler ES-Module verwendet, muss jedoch etwas unternommen werden. Hier können Sie eine der beiden am häufigsten verwendeten Methoden anwenden. Die erste davon ist, dass den Dateien die Erweiterung .mjs zugewiesen .mjs . Das zweite ist, dass die nächste übergeordnete Datei package.json das Konstrukt "type": "module" .

Beim ersten Ansatz ist alles klar - .js Dateien werden in .mjs Dateien umbenannt. Wenn Sie den zweiten Ansatz verwenden, package.json in der package.json package.json oder package.json , die sich in dem Ordner mit den ES-Modulen befindet, die type Eigenschaft mit dem value- module :

 {   "type": "module" } 

Eine weitere Möglichkeit im Zusammenhang mit der Arbeit mit ES-Modulen besteht darin, sie in die package.json des package.json Projekts aufzunehmen und die Dateierweiterungen mithilfe von CommonJS-Modulen in .cjs zu .cjs .

Persönlich scheint mir die Verwendung der .cjs .mjs oder .cjs keine besonders gute Idee zu sein. Daher freue ich mich, dass es für die Arbeit mit ES-Modulen ausreicht, Änderungen an der Datei package.json .

Importieren Sie WebAssembly-Module


Node.js unterstützt jetzt nicht nur ES-Module, sondern auch den Import von WebAssembly-Modulen (Wasm-Modulen). Ein Wasm-Modul ist eine Datei, die Code in einem portablen Binärformat enthält, das schneller als ein ähnlicher JavaScript-Code analysiert und mit einer ähnlichen Geschwindigkeit wie der native ausgeführt werden kann. Wasm-Module können durch Entwicklung von Quellcode in Sprachen wie C / C ++, Go, C #, Java, Python, Elixier, Rust und vielen anderen erstellt werden.

Die Unterstützung für WebAssembly-Module befindet sich noch in einer experimentellen Phase. Um diese Funktion zu aktivieren, müssen Sie Node.js beim Starten der Anwendung ein spezielles Befehlszeilenflag übergeben:

 node --experimental-wasm-modules index.js 

Betrachten Sie ein Beispiel. Angenommen, wir haben eine Bildverarbeitungsbibliothek als Wasm-Modul implementiert. So arbeiten Sie mit einer solchen Bibliothek in JS-Code:

 import * as imageUtils from "./imageUtils.wasm"; import * as fs from "fs"; ( async () => {   const image = await fs.promises.readFile( "./image.png" );   const updatedImage = await imageUtils.rotate90degrees( image ); } )(); 

Hier haben wir das Modul importiert und die darin verfügbare Funktion verwendet.

Wasm-Module in Node.js können mit der neuen Anweisung dynamic import() importiert werden:

 "use strict"; const fs = require("fs"); ( async () => {   const imageUtils = await import( "./imageUtils.wasm" );   const image = await fs.promises.readFile( "./image.png" );   const updatedImage = await imageUtils.rotate90degrees( image ); } )(); 

WebAssembly-Systemschnittstelle


Die WebAssembly-Technologie wurde wie JavaScript mit Blick auf die Sicherheit entwickelt. Wasm-Code wird in einer sicheren Umgebung ausgeführt, die manchmal als Sandbox bezeichnet wird. Auf diese Weise können Sie das Betriebssystem, in dem es ausgeführt wird, vor einem solchen Code schützen. In einigen Fällen können Wasm-Module, die in der Node.js-Umgebung ausgeführt werden, jedoch nur von der Möglichkeit profitieren, Systemaufrufe zu tätigen.

Hier tritt die WebAssembly-Systemschnittstelle (WebAssembly System Interface, WASI) in die Szene ein. WASI ist als Standardschnittstelle für den Zugriff auf Systeme konzipiert, auf denen Wasm-Code ausgeführt wird. Solche Systeme können Hostanwendungen, Betriebssysteme usw. umfassen.

Sie finden eine aktuelle Übergabe im Node.js-Repository , in der die anfängliche WASI-Unterstützung vorgestellt wird. Tatsächlich ist die WebAssembly-Systemschnittstelle eine der interessanten Funktionen von Node.js, deren Erscheinen im Jahr 2020 erwartet werden kann.

Unterstützung für Diagnoseberichte


Diagnoseberichte sind JSON-Dokumente für Personen, die Informationen zur Funktionsweise von Softwaremechanismen enthalten. Solche Informationen können Funktionsaufrufstapel, Informationen über das Betriebssystem, Daten über geladene Module und andere nützliche Indikatoren umfassen, die zur Unterstützung von Anwendungen beitragen sollen. Ähnliche Berichte können erstellt werden, wenn unbehandelte Ausnahmen und kritische Fehler auftreten. Sie können durch Signale von Prozessen oder mithilfe der neuen process.report API generiert werden. Node.js kann so konfiguriert werden, dass Diagnoseberichte im angegebenen Ordner unter den angegebenen Dateinamen gespeichert werden.

Nun ist diese Funktion experimentell. Um es zu aktivieren, müssen Sie Node.js beim Starten der Anwendung ein spezielles Flag übergeben:

 node --experimental-report --report-uncaught-exception --report-filename=./diagnostics.json index.js 

Ausweitung der Unterstützung für die Internationalisierung


Node.js 13.x enthält die Vollversion der ICU-Bibliothek ( International Components for Unicode ). Die Intensivstation ist ein ausgereiftes und beliebtes Projekt. Unter den zahlreichen Funktionen dieser Bibliothek kann die Unterstützung für die Formatierung von Zahlen, Datumsangaben, Währungen und Zeitausgaben in einem lokalisierten Format erwähnt werden. Sie ist in der Lage, zeitintervallbezogene Berechnungen durchzuführen, Zeichenfolgen zu vergleichen und Texte von Unicode mit anderen Kodierungen zu transkodieren und umgekehrt.

Einige andere neue Funktionen von Node.js


Hier sind einige weitere interessante Features von Node.js, deren Erscheinen im Jahr 2020 erwartet werden kann:

  • Unterstützung für das QUIC-Protokoll. QUIC ist ein modernes Internetprotokoll, mit dem Sie eine zuverlässige und produktive Kommunikation zwischen Anwendungen herstellen können.
  • Verbesserte Unterstützung für Python 3. Im Jahr 2020 sollten wir in der Lage sein, Node.js-Module und native Module mit Python 3 zu erstellen.
  • Eine aktualisierte Version der JS Engine V8. Die Versionen 7.8 und 7.9 der V8-Engine bieten eine verbesserte Anwendungsleistung und Wasm-Unterstützung.
  • Stabile API-Worker-Threads. Mit der Worker Threads-API können Sie intensives Computing parallelisieren.

Sehr geehrte Leser! Was erwarten Sie von der Node.js-Plattform im Jahr 2020 am meisten?


Source: https://habr.com/ru/post/de479270/


All Articles