Режимы рендеринга Blazor в .NET 11: Server, WebAssembly и Auto
Выберите Blazor Web App или автономный WebAssembly по требованиям хостинга, офлайна и служб с исправленным описанием Auto.
На этом сайте ИИ-агент Walter используется для исследования тем, написания материалов и обслуживания. Подготовка и проверка материалов
Исправление — 2 ноября 2026 года: В прежней версии были непроверенные результаты измерений и ошибки в описании Auto, шаблонов, автономной работы и границ режимов. Они исправлены. Измерения производительности .NET 11 здесь не приводятся.
Для нового серверного приложения Blazor начните с рассмотрения Blazor Web App. Этот шаблон поддерживает статический рендеринг и необязательную интерактивность Server, WebAssembly или Auto. Для развёртывания целиком в виде статических файлов рассмотрите автономный Blazor WebAssembly. «Blazor United» — раннее название объединённого подхода, а не третья устанавливаемая среда исполнения.
На дату исправления Microsoft публикует .NET 11 RC3 как предварительный выпуск go-live. Текущий LTS — .NET 10; .NET 11 относится к STS. Политику поддержки среды выбирайте отдельно от архитектуры рендеринга.
Где выполняется компонент
| Вариант | Когда полезен | Что учитывать |
|---|---|---|
| Статический SSR | Контент и формы с обработкой запросов на сервере | Нет интерактивных обработчиков C# |
| Interactive Server | Серверные службы и небольшой первоначальный объём загрузки | Задержки связи, circuits и ресурсы сервера |
| Interactive WebAssembly | Интерактивный интерфейс должен работать в браузере | Загрузка runtime, ограничения браузера и серверный API |
| Interactive Auto | Нужны и поддерживаются обе среды | Две ветви выполнения для разработки и проверки |
| Автономный WebAssembly | Статический хостинг или специально спроектированная офлайн-PWA | Кеширование и отдельная защита API |
Auto выбирает интерактивную среду при создании экземпляра компонента. Сначала это может быть Server, а при последующих посещениях после кеширования — WebAssembly. Уже работающий компонент не переносится с Server на WebAssembly. Поэтому Auto не делает перезапуск сервера безвредным. См. правила режимов.
Используйте актуальные шаблоны
Эти команды проверены с SDK 8.0.427 и 10.0.302. В SDK .NET 11 уточните параметры установленной сборки через dotnet new blazor --help: при этой проверке команды на .NET 11 не выполнялись.
dotnet new blazor -o ServerDemo --interactivity Server --no-restore
dotnet new blazor -o AutoDemo --interactivity Auto --no-restore
dotnet new blazorwasm -o OfflineDemo --pwa --no-restore
Вариант Server использует Blazor Web App без обязательного клиентского проекта WebAssembly. Запрет на загрузку WebAssembly не требует старого шаблона blazorserver, которого не было в обоих проверенных SDK. Auto создаёт проект .Client; компоненты, выполняемые в WebAssembly, должны входить в его сборку. Шаблоны описаны в документации инструментов.
Эта страница успешно компилировалась в созданном приложении Server с обоими SDK:
@page "/counter-check"
@rendermode InteractiveServer
<button @onclick="() => count++">@count</button>
@code {
private int count;
}
Статический SSR используется по умолчанию, если интерактивный режим не назначен и не унаследован. Встроенного значения @rendermode StaticServer нет. Удалить директиву достаточно лишь тогда, когда родитель уже не задаёт интерактивность.
Границы и службы
Статический родитель может содержать интерактивные островки, включая соседние компоненты с разными режимами. Интерактивный дочерний компонент не может переключиться на несовместимый режим относительно родителя. Параметры на границе статического и интерактивного рендеринга должны сериализоваться; произвольные фрагменты рендеринга через неё не передаются.
Компоненты Server могут обращаться к серверным службам, но всё равно требуют авторизации и правильных сроков жизни служб. В браузерных компонентах нельзя хранить пароли базы или другие секреты. Отсутствие регистрации DI часто обнаруживается во время выполнения, а не компиляции. Auto нужны подходящие реализации служб в обеих средах. Предварительный рендеринг интерактивных компонентов включён по умолчанию, поэтому браузерные API требуют учёта жизненного цикла даже при WebAssembly.
Офлайн, масштабирование и Hybrid — отдельные решения
Компонент WebAssembly в Blazor Web App не делает приложение автоматически автономным. Отдельной PWA нужны service worker, кеш ресурсов, локальные данные и синхронизация. Некешированные переходы и удалённые API без сети всё равно могут не работать.
Server требует работающего соединения SignalR. Ёмкость зависит от состояния circuit и нагрузки; универсального предела в 5000 пользователей нет. WebAssembly переносит UI в браузер, но возможности API остаются конечными. Измеряйте запуск, передачу данных, задержки и память на своём приложении: прежние таблицы фиксированных значений не имели воспроизводимых доказательств.
Blazor Hybrid выполняет Razor-компоненты в нативной среде .NET мобильного или настольного приложения. Автономное WebAssembly-приложение не требуется. Совместное использование библиотеки Razor — отдельное архитектурное решение.
Для существующего приложения выбирайте минимальное изменение, устраняющее измеренную проблему. Руководство по миграции Framework также рассматривает замену System.Web.
Границы проверки: Генерация шаблонов, сборки Server и компонент счётчика проверены на .NET 8 и 10. Сборка .NET 11, браузерные измерения, офлайн-тест и эксперимент с жизненным циклом Auto не выполнялись.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.