Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use as práticas a seguir para otimizar o tempo de inicialização, a memória, a CPU e o uso da rede do WebView2. Use essas ferramentas e fluxos de trabalho para solucionar problemas de desempenho.
A inserção do Microsoft Edge WebView2 em aplicativos do Windows habilita recursos modernos da Web. O WebView2 usa a arquitetura de vários processos do Edge, portanto, cada controle inicia vários processos do mecanismo do navegador que adicionam memória e sobrecarga de inicialização.
Conteúdo detalhado:
- Identificar o tipo de gargalo de desempenho
- Usar o Evergreen Runtime
- Otimizar o desempenho da inicialização
- Uso de memória e gerenciamento de processos
- Desempenho de renderização e CPU
- Desempenho de rede e carregamento
- Comunicação entre o controle WebView2 e o aplicativo host
- Ferramentas de telemetria e criação de perfil
- Solução de problemas de fluxos de trabalho para problemas de desempenho
- Confira também
Identificar o tipo de gargalo de desempenho
Observe os sintomas da lentidão do desempenho para determinar se o problema é:
Atraso na inicialização. Consulte Otimizar o desempenho da inicialização, abaixo.
Alto uso de memória. Consulte Uso de memória e gerenciamento de processos, abaixo.
Carga de CPU sustentada. Veja o desempenho de CPU e renderização, abaixo.
Carregamento lento da página. Consulte Desempenho de rede e carregamento, abaixo.
Usar o Evergreen Runtime
Sempre que possível, implante seu aplicativo com o Evergreen WebView2 Runtime. O Evergreen Runtime é atualizado automaticamente para obter as melhorias de desempenho e correções de segurança mais recentes. Mantenha o WebView2 Runtime perene (ou seja, atualizado), para preparar seu aplicativo para o futuro. Usar uma versão fixa corre o risco de perder otimizações recentes.
Se você precisar usar um tempo de execução fixo por motivos offline ou de compatibilidade, atualize-o regularmente depois de testar novos builds.
Teste seu aplicativo usando os canais de visualização mais recentes do WebView2 (Beta, Dev ou Canary) para se preparar para as próximas alterações. Muitos problemas de desempenho anteriores, como vazamentos de memória e alto uso de CPU, foram resolvidos em versões mais recentes do WebView2 Runtime.
Se as versões do Microsoft Edge e do WebView2 forem correspondentes, e o Microsoft Edge estiver em execução, os binários necessários do WebView2 já estarão na memória, melhorando o desempenho da inicialização.
Veja também:
- O modo de distribuição Evergreen Runtime em Distribuir seu aplicativo e o WebView2 Runtime.
Otimizar o desempenho da inicialização
Partida a frio (inicialização a frio)
Um gargalo de desempenho comum é o momento de criar um controle WebView2 e navegar até uma página da Web pela primeira vez. Em uma inicialização fria, o WebView2 deve ativar seus processos e caches de disco, o que pode introduzir um atraso perceptível (que pode variar de acordo com a complexidade do hardware e do conteúdo).
Para otimizar a inicialização, use as seguintes práticas recomendadas.
Não use o WebView2 para a interface inicial do usuário
Para renderizar telas iniciais ou caixas de diálogo simples, use telas XAML ou Win32 leves em vez de WebView2.
Evite renderizar telas iniciais ou caixas de diálogo simples com o WebView2, devido aos custos de inicialização e à contenção de recursos. Inicialize o WebView2 somente ao exibir conteúdo real da Web.
Veja também:
Otimizar a localização da Pasta de Dados do Usuário (UDF)
Mantenha a UDF na pasta de dados do aplicativo local padrão, para desempenho. Consulte Gerenciar pastas de dados do usuário.
Evite unidades lentas ou compartilhamentos de rede; Coloque os dados em um disco físico mais rápido.
Evitar instâncias redundantes do WebView2
Planeje sua interface do usuário para que você não crie mais controles WebView2 do que o necessário.
Por exemplo, se estiver navegando entre várias páginas da Web, talvez seja mais rápido reutilizar um único WebView2 e simplesmente navegar até uma nova URL, em vez de destruir e recriar um controle WebView2.
Veja também:
Uso de memória e gerenciamento de processos
Cada controle WebView2 cria seu próprio conjunto de processos, como navegador, renderizador e GPU. O uso de recursos geralmente cresce à medida que mais instâncias do WebView2 são criadas, com cada instância executando seu próprio conjunto de processos do navegador.
Uma instância do WebView2 usa memória com base na complexidade do conteúdo da Web e nos processos do navegador que ela cria. A execução de muitas instâncias do controle WebView2 pode sobrecarregar a memória do sistema.
Abaixo estão as práticas recomendadas para gerenciar e reduzir o volume de memória.
Compartilhar ambientes WebView2
Para economizar memória, use um
CoreWebView2Environmentem todos os controles WebView2 em um aplicativo, garantindo parâmetros consistentes para compartilhamento.Reutilize o mesmo ambiente em interfaces com guias, em vez de criar vários ambientes.
Veja também:
Usar o compartilhamento de processo no nível do aplicativo
Se possível, use o compartilhamento de processos no nível do aplicativo.
Vários aplicativos podem compartilhar um processo do navegador usando a mesma pasta de dados do usuário e
CoreWebView2EnvironmentOptions. Isso reduz o uso de memória, mas requer um gerenciamento cuidadoso dos perfis e testes completos, devido à possível interferência entre aplicativos.Lembre-se de que, ao compartilhar uma pasta de dados do usuário (UDF), os dados subjacentes (como cookies, caches e bancos de dados) estão sendo compartilhados entre diferentes aplicativos.
Veja também:
Evitar objetos host de escopo grande
Se você usa AddHostObjectToScript para expor objetos .NET à Web, lembre-se do que esses objetos contêm na memória. Todo o objeto é efetivamente referenciado enquanto o contexto do script continuar a viver, o que pode impedir a coleta de lixo desse objeto no lado do .NET.
Não exponha um gráfico de objeto muito grande, se apenas uma pequena parte for necessária para scripts. Prefira criar objetos host estreitos e específicos para a finalidade, em vez de passar modelos de aplicativos completos. Por exemplo:
Exponha apenas as operações e os dados de que a página realmente precisa. Por exemplo, exponha um
FileServiceobjeto, em vez de todoAppContexto seu .Envolva objetos complexos por trás de pequenas fachadas para evitar a exposição involuntária de hierarquias de objetos profundos.
Para coleções, forneça resultados filtrados ou paginados em vez de expor a estrutura de dados completa.
Quando a página que precisava do objeto desaparecer, chame CoreWebView2.RemoveHostObjectFromScript para liberar o grafo de objetos. Por exemplo, se você sair de uma página que estava usando um objeto host, remova esse objeto para evitar mantê-lo ativo nos bastidores.
Veja também:
- Compartilhamento de objetos de host/web em Visão geral das APIs do WebView2.
Evitar vazamentos de memória
Remova os manipuladores de eventos nativos antes de descartar objetos WebView2, para evitar ciclos de referência e vazamentos.
Evite fechamentos que façam referência forte ao WebView2; Use referências fracas quando necessário.
Chamada
WebView2.Dispose()para liberar objetos WebView2 quando eles não forem mais necessários.
Veja também:
- Método WebView2.Dispose (booleano) - WPF.
- Método WebView2.Dispose(Boolean) - WinForms.
- Corrigir problemas de memória
Usar APIs de gerenciamento de memória
Defina
MemoryUsageTargetLevel = CoreWebView2MemoryUsageTargetLevel.Lowem exibições da Web inativas para reduzir o uso de memória - isso pode fazer com que o mecanismo do navegador descarte dados armazenados em cache ou troque memória para o disco. Quando a instância do WebView2 estiver ativa novamente, restaure o nível de destino paraNormal, para obter desempenho total. Consulte Meta de uso de memória em Visão geral das APIs do WebView2.Se a instância do WebView2 não for usada por um tempo, chame
CoreWebView2.TrySuspendAsync()para suspender o processo de renderização, o que pausa os scripts e diminui ainda mais o uso de recursos. Retomar comResume()quando necessário. EssasTryoperações são de melhor esforço. Consulte Desempenho e depuração em Visão geral das APIs do WebView2.
Otimizar o conteúdo da Web
- Otimize o conteúdo da Web renderizado. Observe se o excesso de memória está sendo usado no heap de JavaScript. Use o Microsoft Edge DevTools, como a ferramenta Memória , para monitorar o uso de recursos de memória por vários conteúdos da Web. Consulte Registrar instantâneos de heap usando a ferramenta Memória (tipo de criação de perfil "Heap snapshot")
Atualizar periodicamente o WebView2
Atualize periodicamente a instância do WebView2. Em cenários em que o ciclo de vida da página acumula estado naturalmente, como uma página da Web de execução longa, atualizar a instância do WebView2 ajuda a retornar o processo do WebView2 para uma linha de base limpa.
Algumas páginas de longa duração podem reter recursos ao longo do tempo, dependendo do conteúdo da Web e do design do aplicativo. Se o uso de memória crescer inesperadamente, inspecione o seguinte usando o DevTools:
Uso de heap de JavaScript. Confira:
Ouvintes de eventos. Confira:
- Analise a falta de suporte ao teclado usando a guia Ouvintes de Eventos em Analisar o suporte ao teclado em formulários, sobre a guia Ouvintes de Eventos na ferramenta Elementos .
- Selecione as métricas de desempenho a serem monitoradas em Medir o desempenho do tempo de execução de uma página usando a ferramenta Performance monitor, sobre a métrica de ouvintes de eventos JS .
Retenção de DOM. Confira:
Desempenho de renderização e CPU
O WebView2 descarrega a renderização de conteúdo da Web para o mecanismo do navegador que o Edge usa, portanto, as características de desempenho são como executar um site no Edge.
As práticas a seguir garantem o uso eficiente da CPU e renderização suave.
Habilitar a aceleração de hardware
Não desabilite o uso da GPU pelo WebView2, para renderização (por meio do
disable-gpusinalizador), exceto quando você estiver solucionando problemas.Por padrão, o WebView2 usa a GPU para renderização. O uso da GPU pelo WebView2 é fundamental para o desempenho. Drivers de GPU e buffers adicionais devem ser alocados, o que requer memória adicional.
Confira também
-
Sinalizadores do navegador WebView2 -
disable-gpu
Simplificar o conteúdo da Web
Otimize páginas usando as seguintes técnicas:
Limite o JavaScript pesado.
Debounce ou limitação de tarefas.
Use CSS (em vez de JavaScript) para animações.
Divida scripts longos para manter a interface do usuário responsiva.
Use o DevTools do Microsoft Edge para identificar gargalos.
Use a otimização típica da Web: evite a sobrecarga excessiva de layout, em que um script alterna entre a leitura e a gravação de propriedades DOM, causando vários refluxos.
Veja também:
- Ferramenta Desempenho: Analise o desempenho do seu site
- Analisar o desempenho do tempo de execução (tutorial)
- Solução de problemas comuns de desempenho
- Otimize a velocidade do site usando Lighthouse
Reduzir a comunicação desnecessária
Reduza a comunicação desnecessária entre o aplicativo host e o conteúdo da Web hospedado no WebView2. Isso evita a comunicação excessiva entre processos, juntamente com a sobrecarga que a acompanha. Consulte Interoperabilidade de código nativo e da Web.
Envie mensagens em lote sempre que possível, pois a passagem frequente de mensagens pode aumentar o uso da CPU.
Gerenciar prioridade do processo
- Se o aplicativo tiver uma carga de trabalho nativa pesada, atribua prioridades de thread com cuidado, para evitar a falta de threads do WebView2. O WebView2 cria processos de renderização separados.
Veja também:
Testar cenários reais
- Teste seu conteúdo real no hardware de destino, usando o DevTools do Microsoft Edge para localizar e otimizar problemas de desempenho.
Veja também:
Desempenho de rede e carregamento
A latência de rede e a largura de banda limitada podem causar problemas de desempenho percebidos pelo usuário, especialmente ao carregar conteúdo da Web em um controle WebView2.
As práticas recomendadas a seguir se sobrepõem ao desenvolvimento geral da Web.
Utilizar trabalho de serviço e cache
O WebView2 é compatível com o cache do navegador.
Use o cache e os trabalhadores de serviço.
Forneça cabeçalhos de cache adequados, para que solicitações repetidas de recursos usem versões armazenadas em cache.
Considere o pré-cache de arquivos estáticos usando um trabalho de serviço, para acesso offline; mas monitore o tamanho do cache.
Veja também:
- Cache HTTP no MDN.
- Exibir dados do cache
- Usando Trabalhadores de Serviço no MDN.
Verificar gargalos de rede
Use a ferramenta DevTools Network para identificar recursos lentos no WebView2; consulte Inspecionar atividade de rede.
Otimize ou carregue de forma assíncrona scripts ou APIs lentos de terceiros, conforme necessário.
Reduzir os payloads iniciais
Para melhorar a velocidade percebida:
Mantenha a carga inicial leve. Prefiro enviar HTML estático inicialmente, pois ele geralmente carrega, analisa e renderiza mais rápido que o JavaScript. Seja cauteloso ao usar inicialmente o JavaScript junto com uma estrutura de aplicativo de página única; Essa estrutura normalmente carrega muito código na inicialização, o que pode atrasar a renderização inicial do conteúdo da Web.
O HTML carrega, analisa e renderiza muito rápido - mais rápido do que o tempo que o JavaScript levaria para produzir a mesma interface do usuário. Com algumas estruturas JS de aplicativo de página única, mesmo que o HTML inicial da estrutura seja pequeno, todo o código da estrutura deve ser baixado, analisado e executado, antes que qualquer coisa possa ser exibida.
Adiar componentes pesados.
Carregue lentamente imagens ou scripts depois que a interface do usuário inicial for exibida.
Veja também:
- Elimine recursos de bloqueio de renderização em Otimize a velocidade do site usando Lighthouse.
Comunicação entre o controle WebView2 e o aplicativo host
Escolha o canal de comunicação certo
O WebView2 fornece várias opções de comunicação web-a-host e host-to-web.
Tente usar mensagens da Web, em vez de objetos host. As mensagens da Web tendem a ser mais rápidas do que os objetos host, devido ao uso de memória e ao tempo, devido à simplicidade e confiabilidade das mensagens da web.
Use objetos host somente quando precisar de recursos que as mensagens da Web não possam expressar com facilidade, como:
APIs avançadas e semelhantes a objetos (métodos, propriedades, eventos) que você deseja expor diretamente ao JavaScript.
Interações com estado em que manter o contexto do lado do host é mais simples do que passar mensagens estruturadas para frente e para trás.
Fluxos de dados grandes ou binários em que serializar repetidamente cargas úteis em mensagens da Web se torna ineficiente.
Os objetos host têm as seguintes desvantagens:
Os objetos host exigem marshalling COM, que pode introduzir instabilidade se o grafo do objeto for alterado ou não for empacotado corretamente.
Os objetos host geralmente são mais lentos para chamadas frequentes e tagarelas em comparação com um único lote
WebMessage, porque cada método ou acesso de propriedade cruza o limite individualmente.Os objetos host criam um acoplamento mais estreito entre o código da Web e o código do host, reduzindo a portabilidade.
Veja também:
Otimizar a comunicação
Implemente a comunicação assíncrona e em lote para minimizar a comunicação IPC e reduzir a cópia de dados.
Veja também:
- Interoperabilidade web/nativa na Visão geral das APIs WebView2.
- Interoperabilidade de código nativo e da Web
Ferramentas de telemetria e criação de perfil
A coleta de dados é fundamental para identificar e corrigir problemas de desempenho.
A seguir estão ferramentas e técnicas de telemetria para o WebView2.
Rastreamento ETW do WebView2
Use o perfil da Microsoft (coletando um rastreamento ETW) com o Gravador de Desempenho do Windows para capturar e analisar eventos detalhados do WebView2.wprp WebView2, como inicializações de processos e tempos de navegação.
Você pode registrar eventos do provedor Edge/WebView2 usando o ETW (Rastreamento de Eventos para Windows); consulte Reunindo um Rastreamento ETW.
Analise rastreamentos no Windows Performance Analyzer para dados de CPU, disco e memória.
Microsoft Edge DevTools
Use o DevTools do Microsoft Edge para monitorar o conteúdo e os processos do WebView2, a fim de identificar problemas como altos vazamentos de CPU ou memória.
Clique com o botão direito em um controle WebView2 em um aplicativo WebView2 e selecione Inspecionar. Por exemplo, clique com o botão direito do mouse no aplicativo de exemplo principal Win32 e clique em Inspecionar. O DevTools é aberto em uma janela de navegador dedicada e desencaixada.
No DevTools, você pode usar ferramentas como a ferramenta Memória e a ferramenta Desempenho :
Veja também:
- Depurar aplicativos WebView2 com o Microsoft Edge DevTools
- Ferramenta Desempenho: Analise o desempenho do seu site
- Corrigir problemas de memória - a ferramenta Memória .
Inspecionar com as Ferramentas de Desenvolvedor do Edge
Use edge://inspecto , que abre a guia Inspecionar com Ferramentas de Desenvolvedor do Edge , para monitorar o conteúdo e os processos do WebView2 e identificar problemas como altos vazamentos de CPU ou memória:
Para saber mais sobre como inspecionar um processo WebView2 usando edge://inspect, consulte Área de trabalho remota WebView2 WinUI 2 (UWP) aplicativos.
Gerenciador de tarefas do navegador
Use o Gerenciador de Tarefas do Navegador para monitorar o conteúdo e os processos do WebView2, para identificar problemas como altos vazamentos de CPU ou memória.
Consulte Monitorar o uso de memória em tempo real (Gerenciador de Tarefas do Navegador).
Solução de problemas de fluxos de trabalho para problemas de desempenho
Quando surgirem problemas de desempenho em um aplicativo WebView2, use uma abordagem estruturada para solucionar problemas, de acordo com as estratégias a seguir.
Teste com conteúdo simples
Carregue uma página HTML mínima.
Se o desempenho ainda estiver lento com conteúdo simples, investigue fatores de inicialização de tempo de execução ou de aplicativo host.
Se o desempenho for mais rápido com conteúdo simples, concentre-se em otimizar o conteúdo da Web.
Veja também:
Verificar a versão do WebView2 Runtime
Verifique se você está executando o WebView2 Runtime mais recente, não uma versão desatualizada ou instalação alternativa do Edge. Atualize o WebView2 Runtime conforme necessário.
Veja também:
- Atualizando o WebView2 Runtime em Configurar seu ambiente de Desenvolvimento para WebView2.
- Distribuir seu aplicativo e o WebView2 Runtime
Monitorar o uso da memória
Use o Gerenciador de Tarefas do Windows para marcar a memória de processo do WebView2.
Um crescimento incomum pode indicar um vazamento - use gravações WPR para depurar isso ainda mais.
Veja também:
Compare o WebView2 com o Microsoft Edge
O WebView2 usa o mesmo mecanismo de navegador principal do Microsoft Edge. Valide o caso com o Microsoft Edge, bem como com o WebView2, para isolar o problema.