V8-Veröffentlichung v7.3
Alle sechs Wochen erstellen wir einen neuen Branch von V8 im Rahmen unseres Veröffentlichungsprozesses. Jede Version wird direkt vor einem Chrome-Beta-Meilenstein aus dem Git-Master von V8 verzweigt. Heute freuen wir uns, unseren neuesten Branch, V8 Version 7.3, anzukündigen, der bis zu seiner Veröffentlichung in mehreren Wochen in Zusammenarbeit mit Chrome 73 Stable in der Beta-Phase ist. V8 v7.3 ist vollgepackt mit allerlei von Entwicklern geschätzten Features. Dieser Beitrag bietet einen Überblick über einige der Highlights als Vorgeschmack auf die Veröffentlichung.
Asynchrone Stack-Traces
Wir aktivieren die Flagge --async-stack-traces
standardmäßig. Kostenlose asynchrone Stack-Traces erleichtern die Diagnose von Problemen in Produktionsumgebungen mit stark asynchronem Code, da die error.stack
-Eigenschaft, die normalerweise an Logdateien/-dienste gesendet wird, jetzt mehr Einsicht darüber bietet, was das Problem verursacht hat.
Schnellere await
-Operationen
Im Zusammenhang mit der oben genannten --async-stack-traces
-Flagge aktivieren wir auch die --harmony-await-optimization
-Flagge standardmäßig, da sie eine Voraussetzung für die --async-stack-traces
ist. Siehe schnellere asynchrone Funktionen und Promises für weitere Details.
Schnellere Wasm-Starts
Durch Optimierungen der internen Abläufe von Liftoff haben wir die WebAssembly-Kompilierungsgeschwindigkeit erheblich verbessert, ohne die Qualität des erzeugten Codes zu beeinträchtigen. Für die meisten Workloads wurde die Kompilierungszeit um 15–25 % reduziert.
JavaScript-Sprachfunktionen
V8 v7.3 kommt mit mehreren neuen JavaScript-Sprachfunktionen.
Object.fromEntries
Die Object.entries
-API ist nichts Neues:
const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]
Leider gab es bisher keine einfache Möglichkeit, aus dem entries
-Ergebnis wieder ein gleichwertiges Objekt zu erstellen… bis jetzt! V8 v7.3 unterstützt Object.fromEntries()
, eine neue eingebaute API, die die Umkehrung von Object.entries
ausführt:
const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }
Für weitere Informationen und Anwendungsbeispiele, siehe unsere Erklärung zu Object.fromEntries
.
String.prototype.matchAll
Ein häufiger Anwendungsfall von globalen (g
) oder stickigen (y
) regulären Ausdrücken ist die Anwendung auf eine Zeichenkette und das Iterieren durch alle Übereinstimmungen. Die neue String.prototype.matchAll
-API erleichtert dies mehr denn je, insbesondere für reguläre Ausdrücke mit Erfassungsgruppen:
const string = 'Lieblings-GitHub-Repos: tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;
for (const match of string.matchAll(regex)) {
console.log(`${match[0]} bei ${match.index} mit '${match.input}'`);
console.log(`→ Besitzer: ${match.groups.owner}`);
console.log(`→ Repo: ${match.groups.repo}`);
}
// Ausgabe:
//
// tc39/ecma262 bei 23 mit 'Lieblings-GitHub-Repos: tc39/ecma262 v8/v8.dev'
// → Besitzer: tc39
// → Repo: ecma262
// v8/v8.dev bei 36 mit 'Lieblings-GitHub-Repos: tc39/ecma262 v8/v8.dev'
// → Besitzer: v8
// → Repo: v8.dev
Für weitere Details, lesen Sie unsere Erklärung zu String.prototype.matchAll
.
Atomics.notify
Atomics.wake
wurde in Atomics.notify
umbenannt und entspricht damit einer aktuellen Spezifikationsänderung.
V8-API
Bitte verwenden Sie git log branch-heads/7.2..branch-heads/7.3 include/v8.h
, um eine Liste der API-Änderungen zu erhalten.
Entwickler mit einer aktiven V8-Auscheckung können git checkout -b 7.3 -t branch-heads/7.3
verwenden, um die neuen Funktionen in V8 v7.3 auszuprobieren. Alternativ können Sie sich für den Beta-Kanal von Chrome einschreiben und die neuen Funktionen schon bald selbst ausprobieren.