Zum Hauptinhalt springen

V8 Veröffentlichung v4.6

· 5 Minuten Lesezeit
das V8-Team

Etwa alle sechs Wochen erstellen wir im Rahmen unseres Veröffentlichungsprozesses einen neuen Branch von V8. Jede Version wird unmittelbar vor dem Branch von Chrome für einen Chrome-Beta-Meilenstein vom Git-Master von V8 abgezweigt. Heute freuen wir uns, unseren neuesten Branch V8 Version 4.6 vorzustellen, der sich in der Beta-Phase befinden wird, bis er in Abstimmung mit Chrome 46 Stable freigegeben wird. V8 4.6 ist vollgepackt mit allerlei Neuerungen für Entwickler, daher möchten wir Ihnen einen Vorgeschmack auf einige Highlights geben, die in den kommenden Wochen veröffentlicht werden.

Verbesserte Unterstützung für ECMAScript 2015 (ES6)

V8 v4.6 fügt Unterstützung für mehrere ECMAScript 2015 (ES6) Features hinzu.

Spread-Operator

Der Spread-Operator macht die Arbeit mit Arrays wesentlich bequemer. Beispielsweise wird imperativer Code überflüssig, wenn Sie einfach nur Arrays zusammenführen möchten.

// Arrays zusammenführen
// Code ohne Spread-Operator
const inner = [3, 4];
const merged = [0, 1, 2].concat(inner, [5]);

// Code mit Spread-Operator
const inner = [3, 4];
const merged = [0, 1, 2, ...inner, 5];

Eine weitere gute Verwendung des Spread-Operators ist die Ersetzung von apply:

// Funktionsparameter in einem Array gespeichert
// Code ohne Spread-Operator
function myFunction(a, b, c) {
console.log(a);
console.log(b);
console.log(c);
}
const argsInArray = ['Hi ', 'Spread ', 'operator!'];
myFunction.apply(null, argsInArray);

// Code mit Spread-Operator
function myFunction (a,b,c) {
console.log(a);
console.log(b);
console.log(c);
}

const argsInArray = ['Hi ', 'Spread ', 'operator!'];
myFunction(...argsInArray);

new.target

new.target ist eines der ES6-Features, die die Arbeit mit Klassen verbessern sollen. Im Hintergrund ist es tatsächlich ein impliziter Parameter für jede Funktion. Wenn eine Funktion mit dem Schlüsselwort new aufgerufen wird, hält der Parameter eine Referenz auf die aufgerufene Funktion. Wenn new nicht verwendet wird, ist der Parameter undefined.

In der Praxis bedeutet das, dass Sie mit new.target herausfinden können, ob eine Funktion normal oder als Konstruktor über das Schlüsselwort new aufgerufen wurde.

function myFunction() {
if (new.target === undefined) {
throw 'Versuchen Sie, es mit new aufzurufen.';
}
console.log('Funktioniert!');
}

// Bricht ab:
myFunction();

// Funktioniert:
const a = new myFunction();

Wenn ES6-Klassen und Vererbung verwendet werden, wird new.target im Konstruktor einer Superklasse an den abgeleiteten Konstruktor gebunden, der mit new aufgerufen wurde. Dies gibt Superklassen während der Konstruktion Zugriff auf das Prototype-Objekt der abgeleiteten Klasse.

Reduzierung von Rucklern

Ruckeln kann nerven, besonders beim Spielen eines Spiels. Oft ist es noch schlimmer, wenn das Spiel mehrere Spieler umfasst. oortonline.gl ist ein WebGL-Benchmark, der die Grenzen aktueller Browser testet, indem er eine komplexe 3D-Szene mit Partikeleffekten und moderner Shader-Rendering rendert. Das V8-Team machte es sich zur Aufgabe, die Leistungsgrenzen von Chrome in solchen Umgebungen auszuloten. Wir sind noch nicht fertig, aber die Früchte unserer Bemühungen zeigen bereits jetzt Wirkung. Chrome 46 zeigt erstaunliche Fortschritte in der oortonline.gl-Leistung, die Sie unten selbst sehen können.

Einige der Optimierungen umfassen:

Das Gute daran ist, dass alle Änderungen in Bezug auf oortonline.gl allgemeine Verbesserungen sind, die potenziell alle Nutzer von Anwendungen beeinflussen, die intensiv WebGL nutzen.

V8-API

Bitte sehen Sie sich unsere Zusammenfassung der API-Änderungen an. Dieses Dokument wird regelmäßig einige Wochen nach jeder Hauptversion aktualisiert.

Entwickler mit einem aktiven V8-Checkout können git checkout -b 4.6 -t branch-heads/4.6 nutzen, um die neuen Funktionen in V8 v4.6 zu testen. Alternativ können Sie Chrome's Beta-Kanal abonnieren und die neuen Funktionen bald selbst ausprobieren.