Como melhorar o tempo de inicialização do DevTools

Maksim sadym
Maksim Sadym

A inicialização do DevTools agora está cerca de 13% mais rápida 🎉 (de 11,2s para 10s)

Texto longo, leia o resumo: o resultado é alcançado com a remoção de uma serialização redundante.

Informações gerais

Enquanto o DevTools está inicializando, ele precisa fazer algumas chamadas ao mecanismo JavaScript V8.

Processo de inicialização do DevTools

O mecanismo que o Chromium usa para enviar comandos do DevTools para o V8 (e para a IPC em geral) é chamado de mojo. Meus colegas de equipe Benedikt Meurer e Sigurd Schneider descobriram uma ineficiência ao trabalhar em outra tarefa e tiveram uma ideia para melhorar o processo, removendo duas etapas redundantes na forma como essas mensagens são enviadas e recebidas.

Vamos nos aprofundar em como o mecanismo mojo funciona.

Os mecanismos mojo

Os mecanismos mojo

Há o comando mojo EvaluateScript, que executa o comando JS. Ele serializa todo o comando JS, incluindo o arguments em uma string de código-fonte JavaScript que pode ser eval(). Como você pode imaginar, essas strings podem se tornar muito longas e caras. Depois que o comando é recebido pelo V8, essas strings de código JavaScript são desserializadas antes da execução. Esse processo de serialização e desserialização de cada mensagem cria uma sobrecarga significativa.

Benedikt Meurer percebeu que a serialização e a desserialização do arguments são muito caras e que todas as etapas "Serialize JS command to JS string" e "Deserialize JS string" são redundantes e podem ser ignoradas.

Detalhes técnicos: RenderFrameHostImpl::ExecuteJavaScript

Como melhoramos

Mecanismos aprimorados

Lançamos outro método da API mojo que permite transmitir diretamente o nome do objeto, o método a ser chamado e a lista de argumentos, em vez de criar a string do código-fonte JavaScript. Isso nos permite pular a serialização e desserialização, e elimina a necessidade de analisar o código JavaScript.

Para obter detalhes técnicos sobre como implementamos essa otimização, consulte estes dois patches:

  1. CL 2431864: [ DevTools] Redução da sobrecarga de desempenho do envio de mensagens no front-end
  2. CL 2442012: [ DevTools] Use ExecuteJavaScriptMethod no DevTools (em inglês)

Impacto

Para medir a eficácia da mudança, fizemos algumas medições comparando as revisões cb971089a058 e 4f213b39d581 do Chromium (antes e depois da mudança).

Em ambas as revisões, executamos o seguinte cenário cinco vezes:

  1. Registrar rastros usando chrome://tracing
  2. Abrir DevTools-on-DevTools
  3. Conseguir o rastreamento CrRendererMain registrado e comparar as métricas específicas do V8.

Com base nesses experimentos, o DevTools abre aproximadamente 13% mais rápido (de 11,2s para 10s) com a otimização.

Destaques, durações da CPU

Nome do método Não otimizada (ms) Otimizado (ms) Diferenças (ms) Melhoria da velocidade (%)
Total 11,213.19 9.953,99 -1.259,20 12,65%
v8.run 499,67 3.61 -496.06 12,65%
V8.Execute 1,654.87 1.349,61 -305.25 3.07%
v8.callFunction 1,171.84 1,339.77 167.94 -1.69%
v8.compile 133.93 3.56 -130.37 1.31%

Tempo de CPU de carregamento do DevTools (ms)

Tabela de comparação completa de métricas de rastreamento

Como resultado, o DevTools é aberto e funciona mais rápido com menos uso da CPU. 🎉

Fazer o download dos canais de visualização

Use o Chrome Canary, Dev ou Beta como navegador de desenvolvimento padrão. Esses canais de pré-visualização dão acesso aos recursos mais recentes do DevTools, testam as APIs de plataforma da Web modernas e encontram problemas no seu site antes que os usuários o encontrem.

Entrar em contato com a equipe do Chrome DevTools

Use as opções abaixo para discutir os novos recursos e mudanças na postagem ou qualquer outro assunto relacionado ao DevTools.

  • Envie uma sugestão ou feedback em crbug.com.
  • Informe um problema do DevTools em Mais opções   Mais   > Ajuda > Informar problemas no DevTools.
  • Publique no Twitter em @ChromeDevTools.
  • Deixe comentários nos vídeos do YouTube sobre o que há de novo ou nos vídeos do YouTube de dicas sobre o DevTools.