Compartilhar via


Práticas recomendadas de desempenho do ASP.NET Core Blazor

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão do .NET 10 deste artigo.

Aviso

Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte a Política de Suporte do .NET e do .NET Core. Para informações sobre a versão vigente, confira a versão .NET 9 deste artigo.

Blazor é otimizado para alto desempenho nos cenários de interface do usuário do aplicativo mais realistas. No entanto, o melhor desempenho depende dos desenvolvedores adotarem os padrões e recursos corretos.

Observação

Os exemplos de código neste nó de artigos adotam NRTs (tipos de referência anuláveis) e análise estática de estado nulo do compilador .NET, que têm suporte no ASP.NET Core no .NET 6 ou posterior.

Compilação AOT (Ahead Of Time)

A compilação AOT (Ahead Of Time) compila o código do .NET de um aplicativo Blazor diretamente no WebAssembly nativo para execução direta pelo navegador. Aplicativos compilados por AOT resultam em aplicativos maiores que levam mais tempo para serem baixados, mas os aplicativos compilados por AOT geralmente fornecem melhor desempenho de runtime, especialmente para aplicativos que executam tarefas com uso intensivo de CPU. Para obter mais informações, confira Ferramentas de criação e compilação antecipada (AOT) do Blazor WebAssembly no ASP.NET Core.

Métricas e rastreamento

As métricas e os recursos de rastreamento ajudam você a monitorar e diagnosticar o desempenho do aplicativo, acompanhar interações do usuário e entender o comportamento do componente em ambientes de produção.

Configuração

Para habilitar Blazor as métricas e o rastreamento em seu aplicativo, configure o OpenTelemetry com os seguintes medidores e fontes de atividade no arquivo do Program aplicativo em que os serviços são registrados:

builder.Services.ConfigureOpenTelemetryMeterProvider(meterProvider =>
{
    meterProvider.AddMeter("Microsoft.AspNetCore.Components");
    meterProvider.AddMeter("Microsoft.AspNetCore.Components.Lifecycle");
    meterProvider.AddMeter("Microsoft.AspNetCore.Components.Server.Circuits");
});

builder.Services.ConfigureOpenTelemetryTracerProvider(tracerProvider =>
{
    tracerProvider.AddSource("Microsoft.AspNetCore.Components");
    tracerProvider.AddSource("Microsoft.AspNetCore.Components.Server.Circuits");
});

Medidores de desempenho

Para obter mais informações sobre os medidores de desempenho a seguir, consulte métricas internas do ASP.NET Core.

Medidor Microsoft.AspNetCore.Components:

  • aspnetcore.components.navigate: controla o número total de alterações de rota no aplicativo.
  • aspnetcore.components.handle_event.duration: mede a duração do processamento de eventos do navegador, incluindo a lógica de negócios.

Medidor Microsoft.AspNetCore.Components.Lifecycle:

  • aspnetcore.components.update_parameters.duration: mede a duração dos parâmetros de componente de processamento, incluindo a lógica de negócios.
  • aspnetcore.components.render_diff.duration: controla a duração da renderização de lotes.
  • aspnetcore.components.render_diff.size: controla o tamanho dos lotes de renderização.

Medidor Microsoft.AspNetCore.Components.Server.Circuits:

Nos aplicativos no lado do servidor Blazor, as métricas adicionais específicas do circuito incluem:

  • aspnetcore.components.circuit.active: mostra o número de circuitos ativos atualmente na memória.
  • aspnetcore.components.circuit.connected: controla o número de circuitos conectados aos clientes.
  • aspnetcore.components.circuit.duration: mede a duração do tempo de vida do circuito e fornece contagem total de circuitos.

Rastreamento de Blazor

Para obter mais informações sobre as seguintes atividades de rastreamento, consulte métricas internas do ASP.NET Core.

Os novos recursos de rastreamento de atividade usam a origem da Microsoft.AspNetCore.Components atividade e fornecem três tipos principais de atividades de rastreamento: ciclo de vida do circuito, navegação e manipulação de eventos.

Rastreamento do ciclo de vida do circuito:

Microsoft.AspNetCore.Components.StartCircuit: rastreia a inicialização do circuito no formato Circuit {circuitId}.

Marcações:

  • aspnetcore.components.circuit.id: identificador de circuito exclusivo.
  • error.type: nome completo do tipo de exceção (opcional)

Links:

  • rastreamento de HTTP
  • Rastreamento do SignalR

Uso: vincula outros rastreamentos do Blazor da mesma sessão/circuito a contextos HTTP e SignalR.

Rastreamento de navegação:

Microsoft.AspNetCore.Components.Navigate: rastreia as alterações de rota com o formato Route {route} -> {componentType}.

Marcações:

  • aspnetcore.components.route: padrão de caminho de URL da página.
  • aspnetcore.components.type: nome da classe do Razor componente.
  • error.type: nome completo do tipo de exceção (opcional).

Links:

  • rastreamento de HTTP
  • Rastreamento do SignalR
  • Rastreamento de circuito

Uso: Quais Blazor páginas esta sessão visitou?

Rastreamento de tratamento de eventos:

Microsoft.AspNetCore.Components.HandleEvent: rastreia o tratamento de eventos com o formato Event {attributeName} -> {componentType}.{methodName}.

Marcações:

  • aspnetcore.components.attribute.name: nome do atributo HTML que dispara o evento (exemplo: onClick).
  • code.function.name: nome do método C# do manipulador.
  • aspnetcore.components.type: nome completo do componente C# de destino que recebe o evento.
  • error.type: nome completo do tipo de exceção (opcional).

Links:

  • Rastreamento de circuito
  • Rastreamento de rota

Usos:

  • Clique em qual componente causou exceção e em qual página?
  • Em qual circuito vinculado e com qual contexto HTTP aconteceu?