Lanzamiento de V8 versión v6.4
Cada seis semanas, creamos una nueva rama de V8 como parte de nuestro proceso de lanzamiento. Cada versión se ramifica desde el maestro de Git de V8 inmediatamente antes de un hito Beta de Chrome. Hoy nos complace anunciar nuestra nueva rama, V8 versión 6.4, que está en beta hasta su lanzamiento junto con Chrome 64 Estable en unas semanas. V8 v6.4 está lleno de todo tipo de novedades para los desarrolladores. Este artículo ofrece un adelanto de algunos de los aspectos destacados en anticipación al lanzamiento.
Velocidad
V8 v6.4 mejora el rendimiento del operador instanceof
en un 3.6×. Como resultado directo, uglify-js ahora es un 15–20% más rápido según el Web Tooling Benchmark de V8.
Esta versión también aborda algunos problemas de rendimiento en Function.prototype.bind
. Por ejemplo, TurboFan ahora emite inline consistentemente todas las llamadas monomórficas a bind
. Además, TurboFan también admite el patrón de callback vinculado, lo que significa que en lugar de lo siguiente:
doSomething(callback, someObj);
Ahora puedes usar:
doSomething(callback.bind(someObj));
De esta manera, el código es más legible y aún obtienes el mismo rendimiento.
Gracias a las últimas contribuciones de Peter Wong, WeakMap
y WeakSet
ahora están implementados utilizando el CodeStubAssembler, resultando en mejoras de rendimiento de hasta 5× en general.
Como parte del esfuerzo continuo de V8 para mejorar el rendimiento de las funciones incorporadas de arrays, mejoramos el rendimiento de Array.prototype.slice
en ~4× al reimplementarlo utilizando el CodeStubAssembler. Además, las llamadas a Array.prototype.map
y Array.prototype.filter
ahora están optimizadas en muchos casos, otorgándoles un perfil de rendimiento competitivo con las versiones hechas a mano.
Trabajamos para que las cargas fuera de los límites en arrays, typed arrays y strings ya no sufran un impacto de rendimiento de ~10× después de notar este patrón de codificación utilizado comúnmente.
Memoria
Los objetos de código integrados y los manejadores de bytecode en V8 ahora se deserializan de manera perezosa desde el snapshot, lo que puede reducir significativamente la memoria consumida por cada Isolate. Los benchmarks en Chrome muestran un ahorro de varios cientos de KB por pestaña al navegar por sitios comunes.
Esté atento a un artículo dedicado sobre este tema a principios del próximo año.
Características del lenguaje ECMAScript
Esta versión de V8 incluye soporte para dos nuevas y emocionantes características de expresiones regulares.
En expresiones regulares con la bandera /u
, los escapes de propiedades Unicode ahora están habilitados de manera predeterminada.
const regexGreekSymbol = /\p{Script_Extensions=Greek}/u;
regexGreekSymbol.test('π');
// → verdadero
El soporte para grupos de captura nombrados en expresiones regulares ahora está habilitado de forma predeterminada.
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'
Más detalles sobre estas características están disponibles en nuestro artículo titulado Próximas características de expresiones regulares.
Gracias a Groupon, V8 ahora implementa import.meta
, lo que permite a los embebedores exponer metadatos específicos del host sobre el módulo actual. Por ejemplo, Chrome 64 expone la URL del módulo a través de import.meta.url
, y Chrome planea agregar más propiedades a import.meta
en el futuro.
Para facilitar el formato sensible al local de las cadenas producidas por los formateadores de internacionalización, los desarrolladores ahora pueden usar Intl.NumberFormat.prototype.formatToParts()
para formatear un número en una lista de tokens y su tipo. ¡Gracias a Igalia por implementar esto en V8!
API de V8
Por favor, utiliza git log branch-heads/6.3..branch-heads/6.4 include/v8.h
para obtener una lista de los cambios en la API.
Los desarrolladores con un checkout activo de V8 pueden usar git checkout -b 6.4 -t branch-heads/6.4
para experimentar con las nuevas características en V8 v6.4. Alternativamente, puedes suscribirte al canal Beta de Chrome y probar las nuevas características por ti mismo pronto.