Поделиться через


Рекомендации по повышению производительности ASP.NET Core Blazor

Замечание

Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Для получения дополнительной информации см. Политику поддержки .NET и .NET Core. Для текущей версии см. версию .NET 9 этой статьи.

Среда Blazor оптимизирована для обеспечения высокой производительности в наиболее реалистичных сценариях пользовательского интерфейса приложения. Тем не менее итоговая производительность зависит от того, насколько эффективно разработчики используют соответствующие шаблоны и функции.

Замечание

Примеры кода в этом узле статей используют nullable reference types (NRTs) и статический анализ состояния на NULL компилятора .NET, которые поддерживаются в ASP.NET Core в .NET 6 или более поздней версии.

Компиляция "Ahead-of-time" (AOT)

Заранее скомпилированная компиляция (AOT) компилирует Blazor код .NET приложения непосредственно в собственный WebAssembly для прямого выполнения браузером. Приложения, скомпилированные с использованием AOT, приводят к увеличению размера приложений, которые загружаются дольше, но такие приложения обычно обеспечивают лучшую производительность во время выполнения, особенно для приложений, выполняющих ресурсоемкие задачи. Дополнительные сведения см. в статье ASP.NET Средства сборки Core Blazor WebAssembly и компиляция с заранеей компиляцией (AOT).

Метрики и трассировка

Метрики и возможности трассировки помогают отслеживать производительность приложения, отслеживать взаимодействие пользователей и анализировать поведение компонентов в рабочих средах.

Конфигурация

Чтобы включить Blazor метрики и трассировку в приложении, настройте OpenTelemetry со следующими источниками измерения и активности в файле приложения Program , где зарегистрированы службы:

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");
});

Счетчики производительности

Дополнительные сведения о следующих счетчиках производительности см. в разделе ASP.NET Встроенные метрики Core.

Microsoft.AspNetCore.Components метр:

  • aspnetcore.components.navigate: отслеживает общее количество изменений маршрута в приложении.
  • aspnetcore.components.handle_event.duration: измеряет длительность обработки событий браузера, включая бизнес-логику.

Microsoft.AspNetCore.Components.Lifecycle метр:

  • aspnetcore.components.update_parameters.duration: измеряет длительность параметров компонента обработки, включая бизнес-логику.
  • aspnetcore.components.render_diff.duration: отслеживает длительность пакетов отрисовки.
  • aspnetcore.components.render_diff.size: отслеживает размер пакетов обработки.

Microsoft.AspNetCore.Components.Server.Circuits метр:

В серверных Blazor приложениях дополнительные метрики, относящиеся к каналу, включают:

  • aspnetcore.components.circuit.active: показывает количество активных каналов в памяти.
  • aspnetcore.components.circuit.connected: отслеживает количество каналов, подключенных к клиентам.
  • aspnetcore.components.circuit.duration: измеряет время существования канала и предоставляет общее число каналов.

Blazor трассировка

Дополнительные сведения о следующих действиях трассировки см. в разделе встроенные метрики ASP.NET Core.

Новые возможности отслеживания активности используют Microsoft.AspNetCore.Components источник активности и предоставляют три основных типа отслеживания: жизненный цикл схемы, навигация и обработка событий.

Трассировка жизненного цикла схемы

Microsoft.AspNetCore.Components.StartCircuit: отслеживает инициализацию схемы с форматом Circuit {circuitId}.

Теги:

  • aspnetcore.components.circuit.id: уникальный идентификатор канала.
  • error.type: полное имя типа исключения (необязательно)

Ссылки:

  • Трассировка HTTP
  • SignalR трассировка

Использование: связывает другие Blazor трассировки одного сеанса или канала с HTTP и SignalR контекстами.

Трассировка навигации:

Microsoft.AspNetCore.Components.Navigate: отслеживает изменения маршрута с форматом Route {route} -> {componentType}.

Теги:

  • aspnetcore.components.route: шаблон пути URL-адреса страницы.
  • aspnetcore.components.type: имя Razor класса компонента.
  • error.type: полное имя типа исключения (необязательно).

Ссылки:

  • Трассировка HTTP
  • SignalR трассировка
  • След цепи

Использование: какие Blazor страницы этого сеанса посетили?

Трассировка обработки событий:

Microsoft.AspNetCore.Components.HandleEvent: трассировка обработки событий в формате Event {attributeName} -> {componentType}.{methodName}.

Теги:

  • aspnetcore.components.attribute.name: имя HTML-атрибута, активировающего событие (например: onClick).
  • code.function.name: имя метода C# обработчика.
  • aspnetcore.components.type: полное имя целевого компонента C#, получающего событие.
  • error.type: полное имя типа исключения (необязательно).

Ссылки:

  • След цепи
  • Трассировка маршрута

Использования:

  • Нажмите, чтобы узнать, какой компонент вызвал исключение и на какой именно странице.
  • В каком связанном канале и с каким контекстом HTTP он произошел?