A equipe do JavaScript V8 anunciou melhorias para otimizar as funções assíncronas e promessas. A equipe também aprimorou a experiência de depuração do código assíncrono, um ponto problemático comum para desenvolvedores de JavaScript.
A introdução de promessas no ES2015 e posteriormente de funções assíncronas e a iteração assíncrona do ES2018 tornam a criação de código assíncrono muito mais eficiente do que o uso de retornos de chamada. No entanto, até recentemente, o uso desses novos recursos não era eficiente. Os engenheiros do Google V8 Maya Lekova e Benedikt Meurer explicam:
Conseguimos melhorar significativamente o desempenho do código assíncrono entre a V8 v5.5 (Chrome 55 e Node.js 7) e a V8 v6.8 (Chrome 68 e Node.js 10). Chegamos a um nível de desempenho em que os desenvolvedores podem usar com segurança esses novos paradigmas de programação sem precisar se preocupar com velocidade. Conseguimos melhorar o desempenho do Promise.all
por um fator de 8 ×.
A equipe do V8 também explorou o desempenho do código-fonte do mundo real, observando o uso de estruturas de middleware como hapi, koa e trek, que usam promessas e funções assíncronas. Com as recentes mudanças no V8, o desempenho ao usar essas estruturas melhorou significativamente.
O V8 introduziu várias mudanças para levar a melhorias de desempenho assíncrono, incluindo o TurboFan, um novo compilador de otimização, e o Orinoco, um novo coletor de lixo, movendo o GC para fora do thread principal para melhorar o processamento de pedidos. Além disso, houve um erro dentro do Node.js 8 que levou à espera em pular microticks para alguns casos.
O trabalho de desempenho levou alguns patches propostos para melhorar a especificação de funções assíncronas, o que deve melhorar o desempenho não apenas no V8, mas em todos os mecanismos JavaScript. Essas alterações incluem a remoção de dois microticks extras e a remoção de uma promessa descartável de funções assíncronas.
Com as atualizações recentes para o código-fonte V8 e refinamentos propostos para a especificação de funções assíncronas, async/wait agora supera a promessa do código pela primeira vez, reduzindo a sobrecarga das funções assíncronas.
Para facilitar a depuração, o Chrome DevTools também melhora os rastreamentos de pilha para incluir a parte assíncrona do rastreamento de pilha.
O V8 é um mecanismo JavaScript de código aberto do Google que usa navegadores baseados no Chrome e no Chromium, bem como o Node.js. O V8 está disponível sob uma licença do estilo BSD. Contribuições são bem-vindas através do projeto V8 GitHub sob o código de conduta Chromium.