Was ist neu in Googles V8 JavaScript Engine Version 7?

Die Beta V8 Version 7.4 ist jetzt verfügbar und bietet die Möglichkeit, die Präsenz der Engine auf Plattformen wie Apple iOS auszudehnen. V8 ist Googles Open Source JavaScript- und WebAssembly-Engine für den Chrome-Browser. Es ist sowohl im Chrome-Browser als auch in der JavaScript-Laufzeit von Node.js ein Grundnahrungsmittel.

Wo kann ich Google V8 herunterladen?

Sie können die Produktionsversion von Google V8 vom Chromium V8-Repo herunterladen.

Zukünftige Version: Was ist neu in V8 Version 7.4

Mit der im April 2019 fälligen Produktionsversion bietet Google V8 Beta 7.4 die folgenden neuen Funktionen:

  • JIT-less V8, in dem die JavaScript-Ausführung unterstützt wird, ohne zur Laufzeit ausführbaren Speicher zuzuweisen. Dies könnte die Erweiterung von V8 auf Plattformen wie Apple iOS, Smart-TVs und Spielekonsolen ermöglichen. Die Standardkonfiguration von V8 basiert auf der Fähigkeit, ausführbaren Speicher zur Laufzeit zuzuweisen und zu ändern. Es gibt jedoch Situationen, in denen es wünschenswert sein kann, die Engine auszuführen, ohne ausführbaren Speicher zuzuweisen, z. B. Plattformen, die den Schreibzugriff auf nicht ausführbaren Speicher für nicht privilegierte Anwendungen, einschließlich iOS, untersagt haben. Wenn Sie Schreibvorgänge in den ausführbaren Speicher nicht zulassen, wird die Angriffsfläche der Anwendung für Exploits verringert. Im JIT-freien Modus wechselt V8 in einen Nur-Dolmetscher-Modus für JavaScript. WebAssembly unterstützt diesen Modus derzeit nicht. Der JIT-freie Modus bringt jedoch eine Leistungsbeeinträchtigung mit sich.
  • WebAssembly-Threads / Atomics sind jetzt unter Nicht-Android-Betriebssystemen aktiviert. Durch diesen Schritt wird die Verwendung mehrerer Kerne über WebAssembly freigeschaltet, wodurch neue, rechenintensive Anwendungen im Web ermöglicht werden.
  • Um die Leistung zu verbessern, überspringt Version 7.4 in einigen Fällen die Anpassung der Argumente und reduziert den Anrufaufwand um 60 Prozent.
  • Die Leistung beim Aufrufen von nativen Accessoren, bei denen es sich um DOM-Accessoren handelt, wurde verbessert.
  • Die Preparser-Leistung wurde verbessert, indem eine Deduplizierung mit Eigenschaftsnamen entfernt wurde. Darüber hinaus wurde ein Leistungsproblem behoben, das eine benutzerdefinierte UTF-8-Decodierung betraf, die vom Quelldatenstrom verwendet wurde.
  • Um den Speicheraufwand zu verringern, wurde die Unterstützung für das Löschen von kompiliertem Bytecode aus Funktionen während der Speicherbereinigung implementiert, wenn diese nicht kürzlich ausgeführt wurden.
  • Um private Klassenfelder zu unterstützen, können Entwickler ein Feld als privat markieren, indem sie ihm das #Präfix voranstellen.

Wo kann man die V8 7.4 Beta herunterladen?

Sie können die V8-Beta von Googles Chromium Git-Repo herunterladen.

Aktuelle Version: Was ist neu in V8 Version 7.3

Zu den neuen Funktionen in V8 7.3 gehören:

  • Das --async-stack-tracesFlag ist standardmäßig aktiviert.
  • Kostenfreie Async-Stack-Traces erleichtern die Diagnose von Produktionsproblemen mit asynchronem Code. Die stackEigenschaft, die normalerweise an Protokolldateien und -dienste gesendet wird, bietet jetzt mehr Einblick in Probleme.
  • A schneller await, wobei das --harmony-await-optimizationFlag standardmäßig aktiviert ist. Dies ist eine Voraussetzung für --async-stack-traces.
  • Schnellerer Start für WebAssembly durch Optimierungen. Bei den meisten Workloads wird die Kompilierung um 15 bis 25 Prozent verbessert.
  • JavaScript-Funktionen wie fromEntries()eine API zum Ausführen der Umkehrung Object.entriesund  String.prototype.Matchalleine API zum Vereinfachen des Anwenden globaler oder klebriger regulärer Ausdrücke auf eine Zeichenfolge und zum Durchlaufen aller Übereinstimmungen.

Aktuelle Version: Was ist neu in Google V8 Version 7.2

Die Version 7.2 von V8 vom Januar 2019 verbessert die JavaScript-Analyse, das WebAssembly-Binärformat und den Speicher.

Um die Analysegeschwindigkeit zu verbessern, enthält V8 Version 7.2 den von Google als schnellsten JavaScript-Parser der Engine bezeichneten, was zu einem schnelleren Laden von Seiten und reaktionsschnelleren Seiten führt. Seit V8 Version 7.0 hat sich die Desktop-Parsing-Geschwindigkeit laut Google um etwa 30 Prozent verbessert.

Für den Speicher werden eingebettete integrierte Funktionen, die Speicherplatz sparen, indem generierter Code für mehrere Isolate freigegeben wird, jetzt in der IA32-Architektur unterstützt und standardmäßig aktiviert.

Für WebAssembly bietet V8 7.2 Verbesserungen bei der Codegenerierung, einschließlich der Aktivierung der Knotenaufteilung im Scheduler des optimierenden Compilers und der Schleifendrehung im Back-End. Außerdem wurde das Wrapper-Caching verbessert und benutzerdefinierte Wrapper eingeführt, um den Overhead beim Aufrufen importierter JavaScript-Mathematikfunktionen zu verringern.

Designänderungen am Registerzuweiser verbessern die Leistung für Codemuster, die in einer späteren Version angezeigt werden. Außerdem verbessern Trap-Handler in Version 7.2 den Durchsatz von WebAssembly-Code. Sie sind unter Windows, MacOS und Linux implementiert. In Chromium sind sie unter Linux aktiviert, wobei MacOs und Windows folgen, wenn die Stabilität bestätigt wird. Pläne sehen auch vor, dass sie auf Android verfügbar sind.

Weitere neue Funktionen in V8 7.2 sind:

  • Die Leistung von Spread-Elementen wurde verbessert, wenn diese an der Vorderseite des Array-Literal auftreten.
  • Eine schnellere async/ await Implementierung ist standardmäßig aktiviert. Die Änderung kann in die offizielle ECMAScript-Spezifikation übernommen werden.
  • stackAsynchrone Stapelspuren ohne Nullpunkt bereichern die Eigenschaft mit asynchronen Aufrufrahmen. Diese Funktion steht hinter dem --async-stack-tracesBefehlszeilenflag zur Verfügung .
  • Unterstützung für öffentliche Klassenfelder, wodurch die JavaScript-Syntax zur Vereinfachung erweitert wird.
  • Der ListFormatVorschlag zur Lokalisierung der Formatierung von Listen.
  • stringify Jetzt werden Escape-Sequenzen für einzelne Surrogate ausgegeben, wodurch die Ausgabe als Unicode gültig wird.

Vorherige Version: Was ist neu in Google V8 Version 7.1

Die Version 7.1 von V8 vom November 2018 bietet Verbesserungen in Bezug auf Speicher und Leistung sowie Verbesserungen für JavaScript und das Binärformat WebAssembly. Für den Speicher werden jetzt Bytecodes für den Interpreter in die Binärdatei eingebettet, wodurch durchschnittlich etwa 200 KB pro Isolat eingespart werden. Um die Leistung zu verbessern, wurde die Escape-Analyse im TurboFan-Compiler erweitert, um lokale Funktionskontexte für Funktionen höherer Ordnung zu verarbeiten, wenn Variablen aus dem umgebenden Kontext zu einem lokalen Abschluss entkommen. Bei der Escape-Analyse wird die Skalarersetzung für Objekte durchgeführt, die sich in einer Optimierungseinheit befinden.

Weitere neue Funktionen in V8 Version 7.1:

  • Für JavaScript RelativeTimeformatermöglicht die im Upgrade enthaltene API die lokalisierte Formatierung relativer Zeiten, z. B. "gestern", ohne Leistungseinbußen. Außerdem unterstützt Version 7.1 den GlobalThisVorschlag und bietet einen universellen Mechanismus für den Zugriff auf das globale Objekt auch in strengen Funktionen oder Modulen, unabhängig von der Plattform.
  • Für WebAssembly wird das Bytecode-Format postMessagefür Module unterstützt. Dieses Verhalten gilt nur für Web-Worker und wird nicht auf prozessübergreifende Szenarien ausgedehnt.

Vorherige Version: Was ist neu in Google V8 Version 7.0

In V8 Version 7.0 vom Oktober 2018 wird eine Vorschau der WebAssembly-Threads angezeigt, die ein Grundelement für die parallele Berechnung darstellen. Um Threads im Chrome-Browser zu verwenden, der V8 verwendet, können Entwickler ihn über chrome://flags/#enable-webassembly-threadseine Origin-Testversion aktivieren oder sich für diese anmelden, um mit neuen Webfunktionen zu experimentieren. WebAssembly, auch bekannt als Wasm, ermöglicht die Kompilierung von Code, der in verschiedenen Sprachen geschrieben wurde, um im Web ausgeführt zu werden.

Weitere neue Funktionen in V8 7.0 sind:

  • Für JavaScript wird die descriptionEigenschaft hinzugefügt prototype, um eine ergonomischere Möglichkeit für den Zugriff auf die Beschreibung zu bieten. Wird auch Array.prototype.sortin Version 7.0 stabil.
  • Erweiterung der eingebetteten integrierten Funktionen, die Speicherplatz sparen, indem generierter Code für mehrere Isolate freigegeben wird. V8 Version 6.9 aktivierte integrierte Funktionen in der X64-Architektur, während Version 7.0 sie auf die verbleibenden Plattformen mit Ausnahme von IA-32 erweitert.

Vorherige Version: Was ist neu in Google V8 Version 6.9

Die V8-Version 6.9 vom September 2018 konzentriert sich auf Speicher- und Leistungsverbesserungen für die JavaScript-Engine von Google.

Um Speicherplatz zu sparen, bietet Version 6.9 eingebettete integrierte Funktionen für x64-basierte Computer. Dies sind Funktionen, die von allen Isolaten gemeinsam genutzt und in die Binärdatei selbst eingebettet werden, anstatt auf den JavaScript-Heap kopiert zu werden. Sie sind also nur einmal im Speicher vorhanden, unabhängig davon, wie viele Isolate ausgeführt werden. Die Designer von V8 haben eine durchschnittliche Reduzierung der Heap-Größe um 9 Prozent auf den Top-10.000-Websites auf x64-Computern festgestellt. Unterstützung für andere Plattformen wird in späteren Versionen folgen.

Aus Gründen der Leistung reduziert V8 Version 6.9 die Pausenzeiten für die Mark-Compact-Speicherbereinigung, indem die WeakMapVerarbeitung verbessert wird. Gleichzeitige und inkrementelle Markierungen können jetzt verarbeitet werden WeakMaps. Zuvor wurde diese Arbeit in der letzten atomaren Pause der Mark-Compact-Speicherbereinigung durchgeführt. Die Speicherbereinigung erledigt jetzt auch mehr Arbeit parallel zu niedrigeren Pausenzeiten.

Aus DataViewGründen der Leistung wurden die Methoden in V8 Torque neu implementiert, wodurch ein kostspieliger Aufruf von C ++ im Vergleich zur vorherigen Laufzeitimplementierung vermieden wurde. Außerdem werden Aufrufe von DataViewMethoden jetzt beim Kompilieren von JavaScript in den TurboFan-Optimierungscompiler eingefügt. Dies bietet eine bessere Spitzenleistung für Hot Code.

V8 Version 6.9 enthält auch Liftoff, einen Baseline-Compiler für das tragbare WebAssembly-Codeformat. Es ist standardmäßig aktiviert und soll die Startzeiten für WebAssembly-basierte Apps verkürzen, indem Code so schnell wie möglich generiert wird. Die Qualität des Codes selbst hat für Liftoff eine untergeordnete Priorität. Der Code muss schließlich vom TurboFan-Compiler von V8 neu kompiliert werden.

Liftoff wurde entwickelt, um ein Problem zu beheben, bei dem das Back-End des Kompilierungsprozesses für TurboFan viel Zeit und Speicher beanspruchte und die Leistung des WebAssembly-Codes verringerte. Durch das Abheben wird der Zeit- und Speicheraufwand für die Zwischendarstellung vermieden, und Maschinencode wird in einem einzigen Durchgang über den Bytecode einer WebAssembly-Funktion generiert. Liftoff und Turbofan geben V8 zwei Kompilierungsstufen, wobei Liftoff ein Baseline-Compiler für den schnellen Start und TurboFan eine Optimierung der Leistung bietet.

Google plant außerdem, die Startzeit weiter zu verbessern, den Speicherverbrauch zu senken und mehr Nutzern die Vorteile von Liftoff zu bieten. Diese Pläne beinhalten Ports zu ARM-Prozessoren zur Verwendung auf Mobilgeräten. Liftoff funktioniert derzeit nur auf Intel 32- und 64-Bit-Plattformen. Weitere in Betracht gezogene Verbesserungen sind:

  • Implementierung eines dynamischen Tier-Ups für mobile Geräte, um geringere Speichervolumina auf diesen Geräten zu berücksichtigen. Die Experimente werden mit einer Kombination aus fauler Kompilierung mit Liftoff und dynamischem Tier-Up von Hot-Funktionen in TurboFan fortgesetzt.
  • Verbesserung der Leistung bei der Generierung von Liftoff-Code und Verbesserung des generierten Codes.

Vorherige Version: Was ist neu in V8 Version 6.8

Google V8 Version 6.8, veröffentlicht im Juli 2018, konzentriert sich auf Leistung und Speichernutzung.

Die Leistung wurde durch Verbesserungen der Array-Destrukturierung gesteigert. Der optimierende Compiler hatte keinen idealen Code für die Array-Destrukturierung generiert. Daher blockierten die Builder von V8 die Escape-Analyse, um die temporäre Zuweisung zu eliminieren. Dadurch wurde die Array-Destrukturierung mit einem temporären Array so schnell wie eine Folge von Zuweisungen.

Eine neue Implementierung von Object.assign verbessert die Leistung durch die Implementierung eines schnellen Pfads für JavaScript.

Die Leistung für TypedArrays wurde in Fällen erhöht, in denen die Sortierung mithilfe einer Vergleichsfunktion erfolgt.

Weitere neue Funktionen in V8 Version 6.8 sind:

  • Um die Ausführungsgeschwindigkeit mit dem tragbaren WebAssembly-Codeformat zu verbessern, können Entwickler auf Linux x64-Plattformen die Trap-basierte Begrenzungsprüfung verwenden, eine Optimierung der Speicherverwaltung.
  • Der Speicherverbrauch von SFIs ( SharedFunctionInfo) wurde durch Komprimieren und Entfernen unnötiger Felder reduziert.
  • Um die Speicherkapazität zu verbessern, wurde eine Abhängigkeit von SFIs aufgehoben, bei der SFIs unnötig am Leben gehalten wurden, was zu dem Risiko von Speicherlecks geführt hatte.

Vorherige Version: Was ist neu in V8 Version 6.7

Googles V8 JavaScriptengine erhält Verbesserungen für Sprachfunktionen und Sicherheit mit dem Zweig Version 6.7, der jetzt in der Produktionsversion ist.

Für die V8 6.7-Engine ist die BigIntUnterstützung standardmäßig aktiviert. Wird in einer zukünftigen Version von ECMAScript erwartet und  BigIntsdient als numerisches Grundelement in JavaScript, um Ganzzahlen mit beliebiger Genauigkeit darzustellen. Mit BigIntist es möglich, eine Ganzzahlarithmetik durchzuführen, ohne überzulaufen. BigIntkönnte als Grundlage für eine eventuelle BigDecimalImplementierung dienen, die nützlich ist, um Geldsummen mit Dezimalgenauigkeit darzustellen.

In V8 6.7 werden außerdem weitere Abhilfemaßnahmen für Schwachstellen im Seitenkanal vorgestellt, um zu verhindern, dass Informationen für nicht vertrauenswürdigen Code für JavaScript und WebAssembly verloren gehen.

Vorherige Version: Was ist neu in V8 Version 6.6

Version 6.6 der V8-JavaScript-Engine von Google konzentriert sich auf JavaScript-Sprachfunktionen und Code-Caching-Funktionen.

Gibt für JavaScript Function.prototype.toString()exakte Teile des Quellcodetextes zurück, einschließlich Leerzeichen und Kommentare. V8 Version 6.6 implementiert ebenfalls String.prototype.trimStart() and String.prototype.trimEnd(). Diese Funktion war über Nicht-Standard- trimLeft()und trimRight()Methoden verfügbar , die als Aliase der neuen Methoden verbleiben, um die Abwärtskompatibilität zu ermöglichen.

Darüber hinaus können Zeilen- und Absatztrennzeichen in Zeichenfolgenliteralen verwendet werden, wodurch JSON übereinstimmt. Zuvor wurden diese in String-Literalen als Zeilenabschlusszeichen behandelt, und ihre Verwendung führte zu einer SyntaxError-Ausnahme.

Die Array.prototype.values Methode gibt Arrays dieselbe Iterationsschnittstelle wie ECMAScript 2015 Map und SetSammlungen. Diese können durch keys,values oder entriesdurch Aufrufen der gleichnamigen Methode interagiert werden. Diese Änderung ist möglicherweise nicht mit vorhandenem JavaScript-Code kompatibel. Entwickler, die auf einer Website merkwürdiges oder fehlerhaftes Verhalten feststellen, können versuchen, diese Funktion über zu deaktivieren chrome://flags/#enable-array-prototype-values.