Aller au contenu principal

Version V8 v6.4

· 4 minutes de lecture
l'équipe V8

Toutes les six semaines, nous créons une nouvelle branche de V8 dans le cadre de notre processus de version. Chaque version est créée à partir de la branche principale de V8 juste avant une étape de Chrome Beta. Aujourd'hui, nous sommes heureux d'annoncer notre nouvelle branche, V8 version 6.4, qui est en version bêta jusqu'à son lancement en coordination avec Chrome 64 Stable dans plusieurs semaines. V8 v6.4 est rempli de toutes sortes d'améliorations pour les développeurs. Ce post présente certains des points forts en attendant la sortie.

Vitesse

V8 v6.4 améliore les performances de l'opérateur instanceof par un facteur de 3,6. En conséquence directe, uglify-js est maintenant 15 à 20 % plus rapide selon le Web Tooling Benchmark de V8.

Cette version corrige également quelques points de faiblesse dans Function.prototype.bind. Par exemple, TurboFan inline désormais de manière cohérente tous les appels monomorphiques à bind. En outre, TurboFan prend également en charge le patron de rappel lié, ce qui signifie que, au lieu de ceci :

doSomething(callback, someObj);

Vous pouvez désormais utiliser :

doSomething(callback.bind(someObj));

De cette façon, le code est plus lisible, et vous conservez les mêmes performances.

Grâce aux dernières contributions de Peter Wong, WeakMap et WeakSet sont maintenant implémentés en utilisant le CodeStubAssembler, ce qui entraîne des améliorations de performance allant jusqu'à 5× sur toute la ligne.

Dans le cadre des efforts continus de V8 pour améliorer les performances des méthodes intégrées des tableaux, nous avons amélioré les performances de Array.prototype.slice d'environ 4× en le réimplémentant avec le CodeStubAssembler. En outre, les appels à Array.prototype.map et Array.prototype.filter sont désormais inlineés dans de nombreux cas, offrant un profil de performance compétitif avec les versions écrites à la main.

Nous avons travaillé pour que les chargements hors limites dans les tableaux, tableaux typés, et chaînes n'entraînent plus une pénalité de performance de ~10× après avoir remarqué ce modèle de codage utilisé dans la nature.

Mémoire

Les objets de code intégrés de V8 et les gestionnaires de bytecode sont désormais désérialisés de manière paresseuse à partir de l'instantané, ce qui peut réduire significativement la mémoire consommée par chaque Isolate. Des benchmarks dans Chrome montrent des économies de plusieurs centaines de kilooctets par onglet lors de la navigation sur des sites courants.

Attendez-vous à un article de blog dédié sur ce sujet tôt l'année prochaine.

Fonctionnalités du langage ECMAScript

Cette version de V8 inclut la prise en charge de deux nouvelles fonctionnalités intéressantes des expressions régulières.

Dans les expressions régulières avec l'indicateur /u, les échappements de propriétés Unicode sont maintenant activés par défaut.

const regexGreekSymbol = /\p{Script_Extensions=Greek}/u;
regexGreekSymbol.test('π');
// → true

La prise en charge des groupes de capture nommés dans les expressions régulières est maintenant activée par défaut.

const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
const result = pattern.exec('2017-12-15');
// result.groups.year === '2017'
// result.groups.month === '12'
// result.groups.day === '15'

Plus de détails sur ces fonctionnalités sont disponibles dans notre article de blog intitulé Fonctionnalités à venir des expressions régulières.

Grâce à Groupon, V8 implémente désormais import.meta, ce qui permet aux intégrateurs d'exposer des métadonnées spécifiques à l'hôte concernant le module actuel. Par exemple, Chrome 64 expose l'URL du module via import.meta.url, et Chrome prévoit d'ajouter davantage de propriétés à import.meta à l'avenir.

Pour faciliter le formatage localisé des chaînes produites par les formateurs d'internationalisation, les développeurs peuvent désormais utiliser Intl.NumberFormat.prototype.formatToParts() pour formatter un nombre en une liste de jetons et leur type. Merci à Igalia pour avoir implémenté cela dans V8 !

API V8

Veuillez utiliser git log branch-heads/6.3..branch-heads/6.4 include/v8.h pour obtenir une liste des modifications de l'API.

Les développeurs disposant d'un dépôt V8 actif peuvent utiliser git checkout -b 6.4 -t branch-heads/6.4 pour expérimenter les nouvelles fonctionnalités de V8 v6.4. Vous pouvez également vous abonner au canal Beta de Chrome et essayer prochainement les nouvelles fonctionnalités par vous-même.