Pular para o conteúdo principal

Lançamento do V8 versão v8.9

· Leitura de 3 minutos
Ingvar Stepanyan ([@RReverser](https://twitter.com/RReverser)), aguardando uma chamada

A cada seis semanas, criamos um novo branch do V8 como parte do nosso processo de lançamento. Cada versão é derivada do master do Git do V8 imediatamente antes de um marco Beta do Chrome. Hoje, temos o prazer de anunciar nosso mais novo branch, V8 versão 8.9, que está em beta até seu lançamento em coordenação com o Chrome 89 Stable em várias semanas. O V8 v8.9 está cheio de recursos úteis para desenvolvedores. Este post fornece uma prévia de alguns dos destaques em antecipação ao lançamento.

JavaScript

await no nível superior

await no nível superior está disponível no motor de renderização Blink 89, um dos principais integradores do V8.

No V8 independente, o await no nível superior permanece atrás da flag --harmony-top-level-await.

Por favor, veja nosso explicador para mais detalhes.

Desempenho

Chamadas mais rápidas com discrepância no tamanho dos argumentos

O JavaScript permite chamar uma função com um número diferente de argumentos do que o número esperado de parâmetros, ou seja, pode-se passar menos ou mais argumentos do que os parâmetros formais declarados. O caso de passar menos argumentos é chamado de subaplicação, e passar mais é chamado de sobreaplicação.

No caso de subaplicação, os parâmetros restantes são atribuídos ao valor undefined. No caso de sobreaplicação, os argumentos restantes podem ser acessados usando o parâmetro de repouso e a propriedade Function.prototype.arguments, ou são simplesmente supérfluos e ignorados. Muitos frameworks da web e do Node.js atualmente usam esse recurso do JavaScript para aceitar parâmetros opcionais e criar uma API mais flexível.

Até recentemente, o V8 tinha uma maquinaria especial para lidar com a discrepância no tamanho dos argumentos: o frame adaptador de argumentos. Infelizmente, a adaptação de argumentos tem um custo de desempenho e é comumente necessária em frameworks modernos de front-end e middleware. Acontece que, com um design inteligente (como inverter a ordem dos argumentos na pilha), podemos remover esse frame extra, simplificar a base de código do V8 e eliminar o overhead quase completamente.

Impacto no desempenho ao remover o frame adaptador de argumentos, medido por meio de um micro-benchmark.

O gráfico mostra que não há mais overhead ao executar no modo sem JIT (Ignition) com uma melhoria de desempenho de 11,2%. Ao usar TurboFan, obtemos um aumento de velocidade de até 40%. O overhead em comparação com o caso sem discrepância é devido a uma pequena otimização no epílogo da função. Para mais detalhes, consulte o documento de design.

Se você quiser saber mais sobre os detalhes por trás dessas melhorias, confira o post dedicado no blog.

API do V8

Por favor, use git log branch-heads/8.8..branch-heads/8.9 include/v8.h para obter uma lista das mudanças na API.

Desenvolvedores com um checkout ativo do V8 podem usar git checkout -b 8.9 -t branch-heads/8.9 para experimentar os novos recursos no V8 v8.9. Alternativamente, você pode se inscrever no canal Beta do Chrome e experimentar os novos recursos em breve.