Задержки и производительность напрямую связаны с режимом запуска Blazor WebAssembly-приложения. В Debug-режиме любое изменение свойств элементов управления или связанных параметров могло вызывать зависания интерфейса на 20-30 секунд и более, в зависимости от сложности страницы.

Как воспроизводится проблема?

Если запускать приложение через Visual Studio (dotnet build / dotnet run), длительные задержки стабильно воспроизводятся. Однако после публикации приложения ситуация кардинально меняется:
  • выполняется dotnet publish;
  • приложение запускается из командной строки;
  • задержки практически исчезают.

Это важный момент при диагностике производительности Blazor WebAssembly-приложений.

Почему так происходит?

Debug-режим работает значительно медленнее, при dotnet build / dotnet run:
  • C# компилируется в IL (Intermediate Language);
  • браузер загружает IL-сборки;
  • код выполняется через .NET runtime в WebAssembly.

В Debug-конфигурации отключены многие оптимизации, поэтому тяжёлые вычисления работают заметно медленнее. Особенно это заметно для библиотеки SixLabors.ImageSharp, активно использующей обработку и преобразование изображений.

Что меняет dotnet publish?

Публикация включает Release-оптимизации:
  • удаляется неиспользуемый код (trimming);
  • уменьшается размер приложения;
  • включаются runtime-оптимизации;
  • снижаются накладные расходы выполнения.

Уже этого достаточно, чтобы производительность выросла в несколько раз. Важно!

AOT включается не автоматически!
Существует распространённое заблуждение, что dotnet publish автоматически включает AOT-компиляцию. На самом деле, полноценный Native AOT нужно включать отдельно, это делается при помощи специального параметра в файле проекта:
<RunAOTCompilation>true</RunAOTCompilation>
Только после этого IL-код компилируется в нативный WebAssembly, который браузер выполняет напрямую.

Итог

Разница между Debug и Publish в Blazor WebAssembly может быть огромной, поэтому перед анализом производительности важно проверить:
  • используется ли Release-сборка;
  • включён ли AOT;
  • воспроизводится ли проблема после dotnet publish.

Во многих случаях опубликованная версия приложения работает в несколько раз быстрее и полностью устраняет критические задержки интерфейса, возникающие при отладке приложения.
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.