V8-Version v6.3
Alle sechs Wochen erstellen wir im Rahmen unseres Veröffentlichungsprozesses einen neuen Branch von V8. Jede Version wird kurz vor einem Chrome-Beta-Meilenstein aus dem Git-Master von V8 abgezweigt. Heute freuen wir uns, unseren neuesten Branch, V8-Version 6.3, anzukündigen, der bis zu seiner Veröffentlichung in Zusammenarbeit mit Chrome 63 Stable in einigen Wochen im Beta-Modus ist. V8 v6.3 ist vollgepackt mit allerlei Entwickler-Features. Dieser Beitrag bietet eine Vorschau auf einige der Highlights in Erwartung der Veröffentlichung.
Geschwindigkeit
Jank Busters III wurde als Teil des Orinoco-Projekts veröffentlicht. Das gleichzeitige Markieren (70-80% des Markierens erfolgt auf einem nicht blockierenden Thread) ist ausgeliefert.
Der Parser benötigt jetzt keine zweite Präparierung einer Funktion mehr. Dies führt zu einer 14% mittleren Verbesserung der Parse-Zeit in unserem internen Startup-Top25-Benchmark.
string.js
wurde komplett auf CodeStubAssembler portiert. Vielen Dank an @peterwmwong für seine hervorragenden Beiträge! Als Entwickler bedeutet dies, dass eingebaute String-Funktionen wie String#trim
ab Version V8 v6.3 wesentlich schneller sind.
Die Leistung von Object.is()
ist jetzt ungefähr auf Augenhöhe mit Alternativen. Im Allgemeinen setzt V8 v6.3 den Weg zu besserer ES2015+ Leistung fort. Neben anderen Punkten haben wir die Geschwindigkeit des polymorphen Zugriffs auf Symbole, polymorphe Inline-Funktion von Konstruktoraufrufen und (markierte) Template-Literale verbessert.
Die schwache optimierte Funktionsliste ist entfernt worden. Weitere Informationen finden Sie im dedizierten Blog-Post.
Die genannten Punkte sind eine nicht erschöpfende Liste von Leistungsverbesserungen. Es wurden viele weitere Arbeiten zur Leistung durchgeführt.
Speicherverbrauch
Schreibschutzmechanismen wurden auf die Verwendung des CodeStubAssembler umgestellt. Dies spart etwa 100 KB Speicher pro isoliertem Prozess.
JavaScript-Sprachfunktionen
V8 unterstützt jetzt die folgenden Stufe-3-Funktionen: dynamischer Modul-Import über import()
, Promise.prototype.finally()
und asynchrone Iteratoren/Generatoren.
Mit dem dynamischen Modul-Import ist es sehr einfach, Module basierend auf Laufzeitbedingungen zu importieren. Dies ist nützlich, wenn eine Anwendung bestimmte Code-Module verzögert laden soll.
Promise.prototype.finally
ermöglicht eine einfache Bereinigung, nachdem ein Promise abgeschlossen wurde.
Das Iterieren mit asynchronen Funktionen wurde durch die Einführung von asynchronen Iteratoren/Generatoren ergonomischer.
Auf der Intl
-Seite wird jetzt Intl.PluralRules
unterstützt. Diese API ermöglicht leistungsstarke internationalisierte Pluralisierungen.
Inspector/Debugging
In Chrome 63 wird Blockabdeckung ebenfalls in der DevTools-Benutzeroberfläche unterstützt. Bitte beachten Sie, dass das Inspektor-Protokoll die Blockabdeckung bereits seit V8 v6.2 unterstützt.
V8 API
Bitte sehen Sie sich unsere Zusammenfassung der API-Änderungen an. Dieses Dokument wird regelmäßig einige Wochen nach jeder Hauptveröffentlichung aktualisiert.
Entwickler mit einem aktuellen V8-Checkout können git checkout -b 6.3 -t branch-heads/6.3
verwenden, um mit den neuen Funktionen in V8 v6.3 zu experimentieren. Alternativ können Sie den Beta-Kanal von Chrome abonnieren und die neuen Funktionen bald selbst ausprobieren.