Versión V8 v6.2
Cada seis semanas, creamos una nueva rama de V8 como parte de nuestro proceso de lanzamiento. Cada versión se deriva del maestro de Git de V8 justo antes de un hito de Chrome Beta. Hoy nos complace anunciar nuestra rama más reciente, versión 6.2 de V8, que está en beta hasta su lanzamiento en coordinación con Chrome 62 Stable en varias semanas. V8 v6.2 está llena de todo tipo de cosas buenas para los desarrolladores. Esta publicación proporciona un avance de algunos de los puntos destacados en anticipación al lanzamiento.
Mejoras de rendimiento
El rendimiento de Object#toString
ya se había identificado previamente como un posible cuello de botella, ya que es usado frecuentemente por bibliotecas populares como lodash y underscore.js, y marcos como AngularJS. Varias funciones auxiliares como _.isPlainObject
, _.isDate
, angular.isArrayBuffer
o angular.isRegExp
se usan frecuentemente en el código de aplicaciones y bibliotecas para realizar verificaciones de tipos en tiempo de ejecución.
Con la llegada de ES2015, Object#toString
se volvió modificable mediante parcheo gracias al nuevo símbolo Symbol.toStringTag
, lo que también hizo que Object#toString
sea más pesado y más desafiante de acelerar. En esta versión, trasladamos una optimización inicialmente implementada en el motor de JavaScript SpiderMonkey a V8, aumentando la capacidad de procesamiento de Object#toString
por un factor de 6.5×.
También impacta en el benchmark del navegador Speedometer, específicamente en la subprueba de AngularJS, donde medimos una mejora sólida del 3%. Lee la entrada de blog detallada para obtener información adicional.
También hemos mejorado significativamente el rendimiento de los proxies de ES2015, acelerando las llamadas a un objeto proxy mediante someProxy(params)
o new SomeOtherProxy(params)
hasta en 5×:
De manera similar, el rendimiento de acceder a una propiedad en un objeto proxy mediante someProxy.property
mejoró en casi 6.5×:
Esto es parte de una pasantía en curso. Sigue atento para una entrada de blog más detallada y resultados finales.
También estamos emocionados de anunciar que, gracias a las contribuciones de Peter Wong, el rendimiento del método incorporado String#includes
mejoró más de 3× desde la versión anterior.
Las búsquedas de código hash para tablas hash internas se volvieron mucho más rápidas, lo que resultó en una mejora de rendimiento para Map
, Set
, WeakMap
y WeakSet
. Una próxima entrada de blog explicará esta optimización en detalle.
El recolector de basura ahora utiliza un Scavenger Paralelo para recolectar la llamada generación joven del heap.
Modo mejorado de bajo consumo de memoria
En las últimas versiones, el modo de bajo consumo de memoria de V8 se ha mejorado (e.g., estableciendo el tamaño inicial del semi-espacio a 512 KB). Los dispositivos con poca memoria ahora enfrentan menos situaciones de falta de memoria. Sin embargo, este comportamiento de bajo consumo puede tener un impacto negativo en el rendimiento de ejecución.
Más características de expresiones regulares
El soporte para el modo dotAll
para expresiones regulares, habilitado mediante la bandera s
, ahora está habilitado por defecto. En modo dotAll
, el átomo .
en expresiones regulares coincide con cualquier carácter, incluidos los terminadores de línea.
/foo.bar/su.test('foo\nbar'); // true
Aserciones lookbehind, otra nueva característica de expresiones regulares, ya están disponibles por defecto. El nombre ya describe bastante bien su significado. Las aserciones lookbehind ofrecen una forma de restringir un patrón para que solo coincida si está precedido por el patrón en el grupo lookbehind. Vienen en dos versiones: coincidente y no coincidente:
/(?<=\$)\d+/.exec('$1 is worth about ¥123'); // ['1']
/(?<!\$)\d+/.exec('$1 is worth about ¥123'); // ['123']
Más detalles sobre estas características están disponibles en nuestra publicación de blog titulada Próximas características de expresiones regulares.
Revisión de literales de plantilla
La restricción sobre las secuencias de escape en literales de plantilla se ha flexibilizado según la propuesta relevante. Esto habilita nuevos casos de uso para las etiquetas de plantilla, como escribir un procesador de LaTeX.
const latex = (strings) => {
// …
};
const document = latex`
\newcommand{\fun}{\textbf{¡Diversión!}}
\newcommand{\unicode}{\textbf{¡Unicode!}}
\newcommand{\xerxes}{\textbf{¡Rey!}}
Breve sobre la h va \u{h}ere // ¡Token ilegal!
`;
Longitud máxima de cadena aumentada
La longitud máxima de cadenas en plataformas de 64 bits aumentó de 2**28 - 16
a 2**30 - 25
caracteres.
Full-codegen ha desaparecido
En V8 v6.2, los últimos componentes importantes del antiguo pipeline se han eliminado. Más de 30K líneas de código se borraron en esta versión: una clara victoria para reducir la complejidad del código.
API de V8
Por favor, revise nuestro resumen de cambios de API. Este documento se actualiza regularmente unas semanas después de cada lanzamiento importante.
Los desarrolladores con un checkout activo de V8 pueden usar git checkout -b 6.2 -t branch-heads/6.2
para experimentar con las nuevas características en V8 v6.2. Alternativamente, pueden suscribirse al canal Beta de Chrome y probar las nuevas características pronto.