В чем разница между RenderMode.Server и RenderMode.ServerPrerendered в Blazor?
Какая разница между
@(await Html.RenderComponentAsync<Todo>(RenderMode.ServerPrerendered))
а также
@(await Html.RenderComponentAsync<Todo>(RenderMode.Server))
Я изучал документацию, но не смог найти ничего, что объясняло бы разницу. а также не совсем понимаю комментарии кода к перечислению:
// Summary:
// Renders a marker for a Blazor server-side application. This doesn't include any
// output from the component. When the user-agent starts, it uses this marker to
// bootstrap a blazor application.
Server = 2,
//
// Summary:
// Renders the component into static HTML and includes a marker for a Blazor server-side
// application. When the user-agent starts, it uses this marker to bootstrap a blazor
// application.
ServerPrerendered = 3
Что происходит за кадром? И каковы сценарии использования Server vs ServerPrerendered?
2 ответа
Объясняется в обновлениях ASP.NET Core и Blazor в.NET Core 3.0 Preview 9:
- Статический Статический рендеринг компонента с указанными параметрами.
- Сервер. Визуализируйте маркер, в котором компонент должен отображаться в интерактивном режиме приложением Blazor Server.
- ServerPrerendered Выполните статическую предварительную визуализацию компонента вместе с маркером, чтобы указать, что компонент впоследствии должен быть отрисован в интерактивном режиме приложением Blazor Server.
Это понятие связано с производительностью. Самый быстрый способ обслуживания страницы - статическая визуализация страницы и последующая отправка, а самый медленный способ обслуживания страницы - обслуживание страницы сервера "интерактивного Blazor" (с живым виртуальным DOM, синхронизированным через веб-сокеты SignalR).
ServerPrerendered
- это компромисс: Blazor предварительно обрабатывает страницу и отправляет ее как статическую страницу, а затем страница становится интерактивным серверным приложением Blazor. Это поведение предназначено для быстрого обслуживания страниц поисковыми системами с позиционированием на основе времени.
Основная проблема с ServerPrerendered заключается в том, что он загружается дважды, поэтому ваш код уровня данных также выполняется дважды. Режим сервера в порядке, может быть немного медленнее.