Sortie de V8 version v5.1
La première étape du processus de sortie de V8 consiste à créer une nouvelle branche à partir du master Git immédiatement avant que Chromium ne branche pour une version Beta de Chrome (environ toutes les six semaines). Notre toute dernière branche est V8 v5.1, qui restera en version bêta jusqu'à ce que nous publions une version stable en conjonction avec Chrome 51 Stable. Voici un aperçu des nouvelles fonctionnalités destinées aux développeurs dans cette version de V8.
Meilleur support ECMAScript
V8 v5.1 contient un certain nombre de changements visant à se conformer au brouillon de spécification ES2017.
Symbol.species
Les méthodes de tableau comme Array.prototype.map
construisent des instances de la sous-classe comme sortie, avec la possibilité de personnaliser cela en changeant Symbol.species
. Des modifications analogues sont apportées à d'autres classes intégrées.
Personnalisation de instanceof
Les constructeurs peuvent implémenter leur propre méthode Symbol.hasInstance
, qui remplace le comportement par défaut.
Fermeture des itérateurs
Les itérateurs créés dans le cadre d'une boucle for
-of
(ou d'autres itérations intégrées, comme l'opérateur spread) sont maintenant vérifiés pour une méthode de clôture appelée si la boucle se termine prématurément. Cela peut être utilisé pour nettoyer après la fin de l'itération.
Sous-classement de RegExp
avec la méthode exec
Les sous-classes de RegExp
peuvent remplacer la méthode exec
pour modifier uniquement l'algorithme de correspondance principal, avec la garantie que cela sera appelé par les fonctions de niveau supérieur comme String.prototype.replace
.
Inférence du nom des fonctions
Les noms de fonctions déduits pour les expressions de fonction sont désormais généralement disponibles dans la propriété name
des fonctions, selon la formalisation ES2015 de ces règles. Cela peut modifier les traces d'appels existantes et fournir des noms différents des versions précédentes de V8. Cela donne également des noms utiles aux propriétés et méthodes avec des noms de propriétés calculés :
class Container {
...
[Symbol.iterator]() { ... }
...
}
const c = new Container;
console.log(c[Symbol.iterator].name);
// → '[Symbol.iterator]'
Array.prototype.values
Analogiquement à d'autres types de collections, la méthode values
sur Array
renvoie un itérateur sur les contenus du tableau.
Améliorations de performance
V8 v5.1 apporte également quelques améliorations notables de performance aux fonctionnalités JavaScript suivantes :
- Exécution de boucles comme
for
-in
Object.assign
- Instanciation de Promise et RegExp
- Appels à
Object.prototype.hasOwnProperty
Math.floor
,Math.round
, etMath.ceil
Array.prototype.push
Object.keys
Array.prototype.join
&Array.prototype.toString
- Aplatissement de chaînes répétées, par exemple
'.'.repeat(1000)
WebAssembly (Wasm)
V8 v5.1 inclut un support préliminaire pour WebAssembly. Vous pouvez l'activer via le flag --expose_wasm
dans d8
. Vous pouvez également tester les démos Wasm avec Chrome 51 (Canal Beta).
Mémoire
V8 a implémenté davantage de fragments d'Orinoco :
- Évacuation parallèle de la jeune génération
- Ensembles mémorisés scalables
- Allocation noire
L'impact est une réduction des saccades et de la consommation de mémoire en cas de besoin.
API de V8
Veuillez consulter notre résumé des changements d'API. Ce document est régulièrement mis à jour quelques semaines après chaque version majeure.
Les développeurs ayant un dépôt actif de V8 peuvent utiliser git checkout -b 5.1 -t branch-heads/5.1
pour expérimenter les nouvelles fonctionnalités de V8 v5.1. Vous pouvez également vous abonner au canal Beta de Chrome et tester bientôt vous-même les nouvelles fonctionnalités.