Pular para o conteúdo principal

26 postagens marcadas com "internals"

Ver todas os Marcadores

Trash talk: o coletor de lixo Orinoco

· Leitura de 14 minutos
Peter ‘o garbo’ Marshall ([@hooraybuffer](https://twitter.com/hooraybuffer))

Ao longo dos últimos anos, o coletor de lixo (GC) do V8 mudou bastante. O projeto Orinoco transformou um coletor de lixo sequencial e de pausa total em um coletor em grande parte paralelo e concorrente com fallback incremental.

Decolagem: um novo compilador baseline para WebAssembly no V8

· Leitura de 16 minutos
Clemens Backes, maestro da compilação de WebAssembly

V8 v6.9 inclui Decolagem, um novo compilador baseline para WebAssembly. Decolagem agora está habilitado por padrão em sistemas desktop. Este artigo detalha a motivação para adicionar outro nível de compilação e descreve a implementação e performance de Decolagem.

Compilação em segundo plano

· Leitura de 5 minutos
[Ross McIlroy](https://twitter.com/rossmcilroy), defensor da thread principal

TL;DR: A partir do Chrome 66, o V8 compila o código-fonte JavaScript em uma thread de fundo, reduzindo o tempo gasto na compilação na thread principal entre 5% a 20% em sites típicos.

Contexto

Desde a versão 41, o Chrome suporta parsing de arquivos fonte JavaScript em uma thread de fundo via a API StreamedSource do V8. Isso permite que o V8 comece a fazer o parsing do código-fonte JavaScript assim que o Chrome baixa o primeiro pedaço do arquivo da rede, continuando o parsing em paralelo enquanto o Chrome transmite o arquivo pela rede. Isso pode proporcionar melhorias consideráveis no tempo de carregamento, uma vez que o V8 pode praticamente terminar o parsing do JavaScript quando o download do arquivo é concluído.

Rastreamento do JS para o DOM e de volta novamente

· Leitura de 5 minutos
Ulan Degenbaev, Alexei Filippov, Michael Lippautz e Hannes Payer — a sociedade do DOM

Depurar vazamentos de memória no Chrome 66 ficou muito mais fácil. As DevTools do Chrome agora podem rastrear e fazer snapshot de objetos DOM C++ e exibir todos os objetos DOM alcançáveis a partir do JavaScript com suas referências. Este recurso é um dos benefícios do novo mecanismo de rastreamento em C++ do coletor de lixo V8.

Desserialização preguiçosa

· Leitura de 7 minutos
Jakob Gruber ([@schuay](https://twitter.com/schuay))

TL;DR: A desserialização preguiçosa foi recentemente ativada como padrão no V8 v6.4, reduzindo o consumo de memória do V8 em mais de 500 KB por aba do navegador em média. Leia para saber mais!

Introdução aos snapshots do V8

Mas primeiro, vamos dar um passo atrás e ver como o V8 usa snapshots de heap para acelerar a criação de novos Isolates (que correspondem aproximadamente a uma aba do navegador no Chrome). Meu colega Yang Guo deu uma boa introdução sobre isso em seu artigo sobre snapshots de inicialização personalizada:

Cobertura de código JavaScript

· Leitura de 10 minutos
Jakob Gruber ([@schuay](https://twitter.com/schuay))

A cobertura de código fornece informações sobre se, e opcionalmente com que frequência, certas partes de uma aplicação foram executadas. É comumente usada para determinar quão bem um conjunto de testes avalia uma base de código específica.

Por que isso é útil?

Como desenvolvedor JavaScript, você pode frequentemente se encontrar em situações onde a cobertura de código pode ser útil. Por exemplo:

  • Interessado na qualidade do seu conjunto de testes? Refatorando um grande projeto legado? A cobertura de código pode mostrar exatamente quais partes da sua base de código estão cobertas.
  • Gostaria de saber rapidamente se uma parte específica da base de código foi alcançada? Em vez de instrumentar com console.log para depuração estilo printf ou passar manualmente pelo código, a cobertura de código pode exibir informações ao vivo sobre quais partes de suas aplicações foram executadas.
  • Ou talvez você esteja otimizando para desempenho e gostaria de saber onde se concentrar? Contagens de execução podem apontar funções e loops mais usados.

Domando a complexidade da arquitetura no V8 — o CodeStubAssembler

· Leitura de 11 minutos
[Daniel Clifford](https://twitter.com/expatdanno), montador do CodeStubAssembler

Neste post, gostaríamos de apresentar o CodeStubAssembler (CSA), um componente do V8 que tem sido uma ferramenta muito útil para alcançar alguns grandes ganhos de desempenho nas últimas várias versões do V8. O CSA também melhorou significativamente a capacidade da equipe do V8 de otimizar rapidamente os recursos do JavaScript em um nível baixo com um alto grau de confiabilidade, o que aumentou a velocidade de desenvolvimento da equipe.

Otimizando proxies ES2015 no V8

· Leitura de 8 minutos
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)), Otimizadora de Proxies

Os proxies são parte integrante do JavaScript desde o ES2015. Eles permitem interceptar operações fundamentais em objetos e personalizar seu comportamento. Proxies formam uma parte central de projetos como jsdom e a biblioteca RPC Comlink. Recentemente, fizemos um grande esforço para melhorar o desempenho dos proxies no V8. Este artigo lança luz sobre padrões gerais de melhoria de desempenho no V8 e, em particular, para proxies.

Tipos de elementos em V8

· Leitura de 16 minutos
Mathias Bynens ([@mathias](https://twitter.com/mathias))
nota

Nota: Se você prefere assistir a uma apresentação em vez de ler artigos, aproveite o vídeo abaixo!

Objetos JavaScript podem ter propriedades arbitrárias associadas a eles. Os nomes das propriedades dos objetos podem conter qualquer caractere. Um dos casos interessantes que um motor JavaScript pode escolher otimizar são propriedades cujos nomes são puramente numéricos, mais especificamente índices de array.