Start Debugging
RU
2026-05-26 Обновлено 2026-11-02 dotnet-11comparisonblazordotnet Edit on GitHub

Режимы рендеринга 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.