Node.js 12 - Die Zukunft von serverseitigem JavaScript

Blog

Einführung

Node.js ist seit seiner Einführung eine bahnbrechende Technologie Erstveröffentlichung im Jahr 2009 . Kurz gesagt, Entwickler können JavaScript verwenden, um serverseitig Skripte auszuführen, die dynamische Webinhalte erzeugen, bevor die Seite an den Webbrowser des Benutzers gesendet wird. Folglich stellt Node.js ein JavaScript-Überall-Paradigma dar, das die Entwicklung von Webanwendungen um eine einzige Programmiersprache herum vereinheitlicht, anstatt verschiedene Sprachen für serverseitige und clientseitige Skripte zu benötigen.



Wenn Sie wie ich ein Fan von JavaScript und Node.js sind, werden Sie begeistert sein zu erfahren, dass es bald viel besser wird.






Knoten 12 neu & verbessert

Warum wird JavaScript viel besser? Node.js 12 wurde erst vor ein paar Monaten veröffentlicht.



Am 23.04.2019, Node.js 12 offiziell gestartet , und JavaScript-Enthusiasten überall freuten sich. Und seien wir klar, dies ist nicht nur ein normales Update der alten Version, dies ist eine große Überarbeitung mit einigen großen Upgrades. Gehen wir die Liste der Highlights durch.



V8-JavaScript-Engine-Upgrades

In Ergänzung zu erwartete Leistungsoptimierungen und -verbesserungen die mit jeder neuen Version der JavaScript-V8-Engine geliefert werden, gibt es diesmal einige wirklich bemerkenswerte Upgrades. Diese beinhalten:






  • Kostenfreie asynchrone Stack-Traces – dies dient dazu, die |_+_|-Eigenschaft mit asynchronen Aufruf-Frames anzureichern, ohne der V8-Engine zusätzliche Laufzeit hinzuzufügen
  • Schnellere Anrufe mit nicht übereinstimmenden Argumenten – in der Vergangenheit musste V8 alle Funktionsaufrufe mit zu vielen oder zu wenigen Parametern gleich behandeln, was zu Lasten der Performance ging. Jetzt ist es intelligent genug, um zu wissen, wann dieser Schritt übersprungen werden kann, wodurch der Anrufaufwand um bis zu 60 % reduziert wird.
  • Schnellere asynchrone Funktionen und Versprechen – ja, die Verwendung von Async ist tatsächlich zwei zusätzliche Mikroticks jetzt schneller als versprochen, wenn Sie neben der synchroneren Syntax async / await einen Grund für Entwickler benötigen, die mit Versprechen nicht vertraut sind
  • Schnelleres JavaScript-Parsing – Beim Start einer Webseite werden knapp 10 % der V8-Zeit mit dem Parsen von JS verbracht. Der neueste veröffentlichte JavaScript-Parser hat die Parsing-Geschwindigkeit auf Desktops um bis zu 30 % verbessert

Mehr Sicherheit mit TLS 1.3

TLS, was für Transport Layer Security steht, ist die Art und Weise, wie Node die verschlüsselte Stream-Kommunikation handhabt.

Mit der Veröffentlichung von Node.js 12, TLS bekommt ein Upgrade auf Version 1.3 , was unbedeutend klingt, aber eigentlich ein großes Update mit zahlreichen Leistungs- und Sicherheitsverbesserungen ist. Obwohl es zunächst nicht intuitiv klingt, ist TLS 1.3 tatsächlich ein einfacher zu implementierendes Protokoll als TLS 1.2, wodurch es sicherer, einfacher zu konfigurieren und schneller zwischen Anwendungen verhandelt werden kann.

Durch die Verwendung von TLS 1.3 erhöhen Node-Apps die Privatsphäre der Endbenutzer und verbessern gleichzeitig die Leistung von Anforderungen, indem die für den HTTPS-Handshake erforderliche Zeit verkürzt wird.

Fazit: Bessere Sicherheit für alle Benutzer und weniger Latenz zwischen kommunizierenden Diensten. Das ist ein großer Gewinn für mich.

Richtig konfigurierte Standard-Heap-Limits

Lassen Sie uns nun über einige Verbesserungen auf niedrigerer Ebene sprechen. Bis zu diesem Punkt war die JavaScript-Heap-Größe standardmäßig auf die von V8 für die Verwendung mit Browsern festgelegten maximalen Heap-Größen festgelegt, sofern nicht manuell anders konfiguriert. Mit der Veröffentlichung von Node.js 12 wird die JS-Heap-Größe basierend auf dem verfügbaren Speicher konfiguriert, wodurch sichergestellt wird, dass Node nicht versucht, mehr Speicher als verfügbar zu verwenden und Prozesse zu beenden, wenn der Speicher erschöpft ist.

Verabschieden Sie sich – zumindest zeitweise – von Speicherfehlern bei der Verarbeitung großer Datenmengen. Das alte |_+_| Flag wird weiterhin verfügbar sein, um bei Bedarf ein anderes Limit zu setzen, aber hoffentlich reduziert diese Funktion die Notwendigkeit, das Flag zu setzen.

Der Standard-HTTP-Parser wird llhttp

Unbemerkt von vielen (mich eingeschlossen), der aktuelle |_+_| Die in Node verwendete Bibliothek war äußerst schwierig zu warten und zu verbessern, weshalb llhttp wurde geboren. Das Projekt ist eine Portierung von http_parser auf TypeScript, die dann über llparse ausgeführt wird, um die C- oder Bitcode-Ausgabe zu generieren.

Google-Domains-Github-Seiten

Es stellt sich heraus, llhttp ist um 156% schneller als http_parser , es ist in weniger Codezeilen geschrieben und alle Leistungsoptimierungen werden automatisch generiert, im Gegensatz zum handoptimierten Code von http_parser.

In Node.js 12 haben sie beschlossen, den Standardparser zum ersten Mal auf llhttp umzustellen und ihn gründlicher auf die Probe zu stellen. Hoffen wir, dass es weiterhin gut funktioniert, wenn viele verschiedene Anwendungen mit vielen unterschiedlichen Anforderungen es ausprobieren.

Diagnoseberichte auf Anfrage

Um die Konversation auf das Debuggen umzustellen, gibt es eine neue experimentelle Funktion in Node.js 12, mit der Benutzer bei Bedarf oder beim Auftreten bestimmter Triggerereignisse einen Bericht erstellen können.

Diese Art von Echtzeit-Reporting kann helfen, Probleme in der Produktion zu diagnostizieren, darunter Abstürze, langsame Leistung, Speicherlecks, hohe CPU-Auslastung, unerwartete Fehler usw. – die Art von Dingen, deren Debugging, Diagnose und Behebung normalerweise Stunden, wenn nicht sogar Tage dauert.

Integrierte Heap-Dumps

Ein weiteres Feature in dieser Version rund um Heaps, das den Debugging-Prozess sicher beschleunigt, sind integrierte Heap-Dumps, die bereits mit Node.js 12 ausgeliefert werden.

Jetzt müssen keine neuen Module installiert werden, um Speicherprobleme zu untersuchen – teilen Sie Node einfach über die Befehlszeile oder einen API-Aufruf mit, welche Art von JSON-formatierter Diagnosezusammenfassung Sie wünschen, und analysieren Sie alle Informationen, die Sie verarbeiten können.

Native Module werden in Node.js einfacher

Abgesehen von den Verbesserungen auf niedriger Ebene gibt es auch einige coole Dinge für Entwickler und Modulhersteller innerhalb des Node-Ökosystems.

Das Erstellen und Erstellen von nativen Modulen für Node wird weiter verbessert, mit Änderungen, die eine bessere Unterstützung für native Module in Kombination mit Worker-Threads sowie die Version 4 der N-API beinhalten, die es einfacher macht, eigene Threads für native zu konfigurieren asynchrone Funktionen.

Zusammengefasst bedeutet dies, dass Ersteller und Betreuer von Node-spezifischen Modulen es fast genauso leicht haben, diese Module zu pflegen wie reine JavaScript-Modulersteller. Die erhöhte Komplexität, die sich daraus ergab, dass die Betreuer die verteilten Binärdateien für jede Node.js-Version neu erstellen mussten, die ihre Module unterstützen sollten, wird dank der N-API jetzt weitgehend abstrahiert.

Arbeiter-Threads kommen – das experimentelle Flag wurde entfernt

Worker-Threads gibt es zwar schon seit Node 10, aber es muss kein Flag mehr aktiviert werden – sie sind auf dem besten Weg, die experimentelle Phase zu verlassen. Vor Node.js 11.7.0 konnten Sie nicht auf das Worker-Thread-Modul zugreifen, es sei denn, Sie starteten |_+_| mit dem |_+_| Flag in der Kommandozeile.

wie man bytecoin in den usa kauft
error.stack

Arbeiter glänzen wirklich, wenn sie CPU-intensive JavaScript-Operationen ausführen, sie werden bei E/A-intensiven Arbeiten nicht viel helfen. Die integrierten asynchronen E/A-Vorgänge von Node sind effizienter, als Worker es sein können.

Verbesserungen der Startzeit

Node.js 11 verkürzte Startzeit von Arbeiter-Threads fast 60% indem Sie die integrierte Code-Cache-Unterstützung verwenden.

Node 12 hat auf dieser Idee aufgebaut, um den Code-Cache für eingebaute Bibliotheken zu generieren im Voraus zur Build-Zeit, sodass der Haupt-Thread den Code-Cache verwenden kann, um das anfängliche Laden einer in JavaScript geschriebenen integrierten Bibliothek zu starten.

Die Endergebnis sind weitere 30% Beschleunigung der Startzeit für den Hauptthread, und Ihre Apps werden für Benutzer schneller als je zuvor geladen.

ES6-Modul-Unterstützung, es ist fast da

Das Beste habe ich mir zum Schluss aufgehoben. Eine der aufregendsten Funktionen für mich ist ES6-Modulunterstützung – worauf so viele von uns gewartet haben. Diese Funktion ist noch experimentell, und die Das Node-Team sucht nach Feedback von Leuten, die es ausprobieren, aber stellen Sie sich vor, Sie könnten nahtlos von Front-End- zu Back-End-JavaScript mit der geringsten Sorgfalt der Welt übergehen.

Hier ist das Beste von der neuesten Version von |_+_| enthält:

  • Kostenfreie asynchrone Stack-Traces – dies dient dazu, die |_+_|-Eigenschaft mit asynchronen Aufruf-Frames anzureichern, ohne der V8-Engine zusätzliche Laufzeit hinzuzufügen
  • Schnellere Anrufe mit nicht übereinstimmenden Argumenten – in der Vergangenheit musste V8 alle Funktionsaufrufe mit zu vielen oder zu wenigen Parametern gleich behandeln, was zu Lasten der Performance ging. Jetzt ist es intelligent genug, um zu wissen, wann dieser Schritt übersprungen werden kann, wodurch der Anrufaufwand um bis zu 60 % reduziert wird.
  • Schnellere asynchrone Funktionen und Versprechen – ja, die Verwendung von Async ist tatsächlich zwei zusätzliche Mikroticks jetzt schneller als versprochen, wenn Sie neben der synchroneren Syntax async / await einen Grund für Entwickler benötigen, die mit Versprechen nicht vertraut sind
  • Schnelleres JavaScript-Parsing – Beim Start einer Webseite werden knapp 10 % der V8-Zeit mit dem Parsen von JS verbracht. Der neueste veröffentlichte JavaScript-Parser hat die Parsing-Geschwindigkeit auf Desktops um bis zu 30 % verbessert
--max-old-space-size
  • Kostenfreie asynchrone Stack-Traces – dies dient dazu, die |_+_|-Eigenschaft mit asynchronen Aufruf-Frames anzureichern, ohne der V8-Engine zusätzliche Laufzeit hinzuzufügen
  • Schnellere Anrufe mit nicht übereinstimmenden Argumenten – in der Vergangenheit musste V8 alle Funktionsaufrufe mit zu vielen oder zu wenigen Parametern gleich behandeln, was zu Lasten der Performance ging. Jetzt ist es intelligent genug, um zu wissen, wann dieser Schritt übersprungen werden kann, wodurch der Anrufaufwand um bis zu 60 % reduziert wird.
  • Schnellere asynchrone Funktionen und Versprechen – ja, die Verwendung von Async ist tatsächlich zwei zusätzliche Mikroticks jetzt schneller als versprochen, wenn Sie neben der synchroneren Syntax async / await einen Grund für Entwickler benötigen, die mit Versprechen nicht vertraut sind
  • Schnelleres JavaScript-Parsing – Beim Start einer Webseite werden knapp 10 % der V8-Zeit mit dem Parsen von JS verbracht. Der neueste veröffentlichte JavaScript-Parser hat die Parsing-Geschwindigkeit auf Desktops um bis zu 30 % verbessert
http_parser
  • Kostenfreie asynchrone Stack-Traces – dies dient dazu, die |_+_|-Eigenschaft mit asynchronen Aufruf-Frames anzureichern, ohne der V8-Engine zusätzliche Laufzeit hinzuzufügen
  • Schnellere Anrufe mit nicht übereinstimmenden Argumenten – in der Vergangenheit musste V8 alle Funktionsaufrufe mit zu vielen oder zu wenigen Parametern gleich behandeln, was zu Lasten der Performance ging. Jetzt ist es intelligent genug, um zu wissen, wann dieser Schritt übersprungen werden kann, wodurch der Anrufaufwand um bis zu 60 % reduziert wird.
  • Schnellere asynchrone Funktionen und Versprechen – ja, die Verwendung von Async ist tatsächlich zwei zusätzliche Mikroticks jetzt schneller als versprochen, wenn Sie neben der synchroneren Syntax async / await einen Grund für Entwickler benötigen, die mit Versprechen nicht vertraut sind
  • Schnelleres JavaScript-Parsing – Beim Start einer Webseite werden knapp 10 % der V8-Zeit mit dem Parsen von JS verbracht. Der neueste veröffentlichte JavaScript-Parser hat die Parsing-Geschwindigkeit auf Desktops um bis zu 30 % verbessert

Halleluja! Ich bin wirklich begeistert, wenn dies hinter der Flagge zur vollständigen Annahme kommt.

Neue Compiler- und Plattform-Mindeststandards für Node 12

Und nicht zuletzt gibt es neue Anforderungen für den Betrieb von Node selbst.

Mit neueren Funktionen, die über interne Verbesserungen und Upgrades auf C++ der V8-Engine in Node.js kommen, kommen neue Mindestanforderungen für Node.js 12. Die Codebasis benötigt jetzt mindestens GCC 6 und glibc 2.17 auf anderen Plattformen als macOS und Windows . Veröffentlichte Binärdateien verwenden dieses neue Toolchain-Minimum und enthalten neue Leistungs- und Sicherheitsverbesserungen zur Kompilierzeit.

einfacher React-Leuchtkasten

Wenn Sie Mac- oder Windows-Rechner verwenden, sollte es Ihnen gut gehen: Windows-Minimums sind für die Ausführung von Node.js 11 gleich, Mac-Benutzer benötigen mindestens Xcode 8 und ein Minimum macOS of 10.10 Yosemite. Linux-kompatible Binärdateien von nodejs.org wird unterstützen Enterprise-Linux 7 , Debian 8 und Ubuntu 14.04 , aber benutzerdefinierte Toolchains auf Systemen, die GCC 6 nicht nativ unterstützen, können erforderlich sein. Ich bin sicher, Sie werden schnell genug herausfinden, was benötigt wird.

Abschluss

Ja, Node.js ist erst 10 Jahre alt, ja, es ist Single-Threaded und ja, es wird nicht so weit verbreitet und genutzt wie einige andere Programmiersprachen, aber Node bietet etwas, das keine andere Programmiersprache von sich behaupten kann: Es ist mit JavaScript erstellt und kann sowohl auf der Client- als auch auf der Serverseite ausgeführt werden .

Und die Teams und Unternehmen, die daran arbeiten, Node zu unterstützen und zu verbessern sind einige der besten und hellsten im Geschäft. Node hat weiterhin von Kern-JavaScript und anderen Sprachen gelernt und die richtigen Teile ausgewählt, um sie in sich selbst zu integrieren, um eine immer bessere Plattform für Entwickler und Anwendungen gleichermaßen zu werden.

Node.js 12 bringt einige äußerst aufregende Verbesserungen wie die Unterstützung von ES6-Modulen, bessere Anwendungssicherheit und schnellere Startzeiten. Obwohl es nicht in LTS-Modus (Long Term Support) bis Oktober 2019 Ich freue mich darauf, mich mit diesen neuen Funktionen vertraut zu machen und zu sehen, was sich das Team sonst noch ausdenken kann, um diese Plattform weiterhin zu einer großartigen serverseitigen Lösung zu machen.

==============================

#node-js #web-entwicklung

blog.logrocket.com

Node.js 12 - Die Zukunft von serverseitigem JavaScript

Node.js 12: Die Zukunft von serverseitigem JavaScript - Node.js 12 bringt einige äußerst aufregende Verbesserungen wie die Unterstützung von ES6-Modulen, bessere Anwendungssicherheit und schnellere Startzeiten.