Saltar al contenido principal

12 publicaciones etiquetados con "internos"

Ver Todas las Etiquetas

¡Tierra a la vista: dejando el Mar de Nodos

· 32 min de lectura
Darius Mercadier

El compilador optimizador de última etapa de V8, Turbofan, es conocido por ser uno de los pocos compiladores de producción a gran escala que utiliza Sea of Nodes (SoN). Sin embargo, desde hace casi 3 años, hemos comenzado a deshacernos del Mar de Nodos y a recurrir a una Representación Intermedia (IR) más tradicional basada en Graphos de Flujo de Control (CFG), que hemos denominado Turboshaft. Hasta ahora, todo el backend de JavaScript de Turbofan usa Turboshaft en su lugar, y WebAssembly usa Turboshaft en toda su tubería. Dos partes de Turbofan aún usan algo del Mar de Nodos: la tubería integrada, que estamos reemplazando lentamente por Turboshaft, y el frontend de la tubería de JavaScript, que estamos reemplazando por Maglev, otra IR basada en CFG. Esta publicación en el blog explica las razones que nos llevaron a alejarnos del Mar de Nodos.

Recolección de basura de alto rendimiento para C++

· 11 min de lectura
Anton Bikineev, Omer Katz ([@omerktz](https://twitter.com/omerktz)), y Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)), expertos en memoria de C++

En el pasado ya hemos escrito bastante sobre la recolección de basura para JavaScript, el modelo de objetos del documento (DOM) y cómo todo esto está implementado y optimizado en V8. Sin embargo, no todo en Chromium es JavaScript, ya que la mayor parte del navegador y su motor de renderizado Blink, donde V8 está integrado, están escritos en C++. JavaScript puede usarse para interactuar con el DOM, que luego es procesado por la tubería de renderizado.

Análisis increíblemente rápido, parte 2: análisis perezoso

· 16 min de lectura
Toon Verwaest ([@tverwaes](https://twitter.com/tverwaes)) y Marja Hölttä ([@marjakh](https://twitter.com/marjakh)), parsers más ligeros

Esta es la segunda parte de nuestra serie que explica cómo V8 analiza JavaScript lo más rápido posible. La primera parte explicó cómo hicimos rápido el escáner de V8.

El análisis es el paso en el que el código fuente se convierte en una representación intermedia que es consumida por un compilador (en V8, el compilador de bytecode Ignition). El análisis y la compilación ocurren en la ruta crítica del inicio de la página web, y no todas las funciones enviadas al navegador son necesarias de inmediato durante el inicio. Aunque los desarrolladores pueden retrasar dicho código con scripts async y deferred, eso no siempre es factible. Además, muchas páginas web envían código que solo es utilizado por ciertas características que un usuario puede ni siquiera acceder durante una ejecución individual de la página.

Integrados incorporados

· 13 min de lectura
Jakob Gruber ([@schuay](https://twitter.com/schuay))

Las funciones integradas de V8 (builtins) consumen memoria en cada instancia de V8. La cantidad de integrados, el tamaño promedio y el número de instancias de V8 por pestaña del navegador Chrome han crecido significativamente. Esta publicación de blog describe cómo reducimos el tamaño mediano del montón de V8 por sitio web en un 19% durante el último año.

Cobertura de código JavaScript

· 11 min de lectura
Jakob Gruber ([@schuay](https://twitter.com/schuay))

La cobertura de código proporciona información sobre si, y opcionalmente con qué frecuencia, se han ejecutado ciertas partes de una aplicación. Comúnmente se utiliza para determinar qué tan exhaustivamente una suite de pruebas evalúa una base de código en particular.

¿Por qué es útil?

Como desarrollador de JavaScript, puede que frecuentemente te encuentres en una situación en la que la cobertura de código sea útil. Por ejemplo:

  • ¿Interesado en la calidad de tu suite de pruebas? ¿Refactorizando un gran proyecto heredado? La cobertura de código puede mostrarte exactamente qué partes de tu base de código están cubiertas.
  • ¿Quieres saber rápidamente si se alcanza una parte particular de la base de código? En lugar de instrumentar con console.log para la depuración estilo printf o avanzar manualmente paso a paso por el código, la cobertura de código puede mostrar información en vivo sobre qué partes de tus aplicaciones se han ejecutado.
  • ¿O tal vez estás optimizando para velocidad y te gustaría saber en qué áreas enfocarte? Los conteos de ejecución pueden señalar funciones y bucles calientes.

Lanzamiento de Ignition y TurboFan

· 7 min de lectura
el equipo de V8

Hoy estamos emocionados de anunciar el lanzamiento de una nueva tubería de ejecución de JavaScript para V8 v5.9 que llegará a Chrome Stable en la versión 59. Con la nueva tubería, logramos grandes mejoras de rendimiento y significativos ahorros de memoria en aplicaciones de JavaScript del mundo real. Discutiremos los números en detalle al final de este artículo, pero primero echemos un vistazo a la propia tubería.

Jank Busters Parte Dos: Orinoco

· 7 min de lectura
los jank busters: Ulan Degenbaev, Michael Lippautz y Hannes Payer

En una entrada de blog anterior, presentamos el problema del jank causado por la recolección de basura, que interrumpe una experiencia de navegación fluida. En esta entrada de blog introducimos tres optimizaciones que establecen las bases para un nuevo recolector de basura en V8, llamado Orinoco. Orinoco se basa en la idea de implementar un recolector de basura mayormente paralelo y concurrente sin límites generacionales estrictos, lo que reducirá el jank de la recolección de basura y el consumo de memoria, mientras proporciona un alto rendimiento. En lugar de implementar Orinoco detrás de una bandera como un recolector de basura separado, decidimos enviar las características de Orinoco de manera incremental en la rama principal de V8 para beneficiar a los usuarios de inmediato. Las tres características discutidas en esta publicación son compactación paralela, procesamiento paralelo del conjunto recordado y asignación negra.

Extras de V8

· 6 min de lectura
Domenic Denicola ([@domenic](https://twitter.com/domenic)), Experto en Streams

V8 implementa un gran subconjunto de los objetos y funciones integrados del lenguaje JavaScript en el propio JavaScript. Por ejemplo, puedes ver nuestra implementación de promesas escrita en JavaScript. Estos integrados se denominan autoalojados. Estas implementaciones se incluyen en nuestra instantánea de inicio para que se puedan crear nuevos contextos rápidamente sin necesidad de configurar e inicializar los integrados autoalojados en tiempo de ejecución.

Instantáneas personalizadas de inicio

· 3 min de lectura
Yang Guo ([@hashseed](https://twitter.com/hashseed)), Ingeniero de software y proveedor de precalentadores de motores

La especificación de JavaScript incluye una gran cantidad de funcionalidades integradas, desde funciones matemáticas hasta un motor de expresiones regulares completo. Cada contexto de V8 recién creado tiene estas funciones disponibles desde el inicio. Para que esto funcione, el objeto global (por ejemplo, el objeto window en un navegador) y toda la funcionalidad integrada deben configurarse e inicializarse en el heap de V8 en el momento en que se crea el contexto. Hacer esto desde cero lleva bastante tiempo.