Blazor WebAssembly
应用资产作为静态文件部署到可为客户端提供静态内容的 Web 服务器或服务中。
托管的 Blazor WebAssembly Client 应用通常使用 Web API 调用或 SignalR(结合使用 ASP.NET Core SignalR 和 Blazor)通过网络与后端 Server 应用交互。
blazor.webassembly.js 脚本由框架和句柄提供:
- 下载 .NET 运行时、应用和应用依赖项。
- 初始化运行应用的运行时。
Blazor WebAssembly 托管模型具有以下优点:
- 应用下载到客户端后即可正常运行。
- 可充分利用客户端资源和功能。
- 工作可从服务器转移到客户端。
- 无服务器部署方案可行,例如通过内容分发网络 (CDN) 为应用提供服务的方案。
Blazor WebAssembly 托管模型具有以下局限性:
- 应用仅可使用浏览器功能。
- 需要可用的客户端硬件和软件(例如 WebAssembly 支持)。
- 下载项大小较大,应用加载耗时较长。
- 例如,.NET Standard 支持和调试方面存在限制。
若要创建 Blazor WebAssembly 应用,请参阅 用于 ASP.NET Core Blazor 的工具。
对于 Visual Studio 中的 Docker 支持,请右键单击托管的 Blazor WebAssembly 解决方案的 Server 项目,然后选择“添加” > “Docker 支持”。
Blazor Server
UI 更新、事件处理和 JavaScript 调用是通过 SignalR 连接进行处理。
ASP.NET Core 应用会引用应用的 Startup 类以添加以下内容:
- 服务器端服务。
- 用于请求处理管道的应用。
客户端应用负责根据需要保持和还原应用状态。
Blazor Server 托管模型具有以下优点:
- 下载项大小明显小于 Blazor WebAssembly 应用,且应用加载速度快得多。
- 应用可充分利用服务器功能,包括使用任何与 .NET Core 兼容的 API。
- 服务器上的 .NET Core 用于运行应用,因此调试等现有 .NET 工具可按预期正常工作。
- 例如,Blazor Server 应用适用于不支持 WebAssembly 的浏览器以及资源受限的设备。
- 应用的 .NET/C# 代码库(其中包括应用的组件代码)不适用于客户端。
重要
有关更多信息,请参见连接到服务器一节。
Blazor Server 托管模型具有以下局限性:
- 每次用户交互都涉及到网络跃点。
- 如果客户端连接失败,应用会停止工作。
- 服务器必须管理多个客户端连接并处理客户端状态。
- 无服务器部署方案不可行,例如通过内容分发网络 (CDN) 为应用提供服务的方案。
若要创建 Blazor Server 应用,请参阅 用于 ASP.NET Core Blazor 的工具。
对于 Visual Studio 中的 Docker 支持,请右键单击 Visual Studio 中的项目,然后选择“添加” > “Docker 支持” 。
与服务器呈现的 UI 进行比较
这两种模型都使用 Razor 语言描述 HTML 内容,但两者在标记的呈现方式上差别显著。
出现另一个对该页面的请求时,例如,服务器验证失败并显示验证摘要时:
- 整个页面将再次重新呈现为 HTML 文本。
- 页面会发送到客户端。
二进制格式可以:
- 转换为 HTML 文本(预呈现 † 期间)。
- 用于在定期呈现期间高效更新标记。
预呈现会使应用对用户的响应更加迅速。
Blazor 中的 UI 更新由以下内容触发:
- 用户交互,例如选中按钮。
- 应用触发器,例如计时器。
差异以二进制格式发送到客户端,并由浏览器应用。
要了解如何创作 Blazor Server 应用以确保充分使用服务器内存,请参阅 ASP.NET Core Blazor Server 的威胁缓解指南。
线路
Blazor 客户端发现 SignalR 连接已断开时,它会尝试使用新的 SignalR 连接来重新连接到服务器。
在 Blazor Server 应用中,若服务器要管理浏览器屏幕,则每个浏览器屏幕均需要独立线路和组件状态的独立实例。
Blazor Server 会将断开连接的路线存储一段时间(可配置),以便客户端重新连接。
有关详细信息,请参阅 ASP.NET Core Blazor SignalR 指南。
UI 延迟
因此,UI 延迟是网络延迟和处理操作时的服务器延迟的总和。
如果是通过 Internet 部署的应用,用户可能会更容易感受到延迟,用户分布广泛时感受尤为明显。
内存使用率增大会导致垃圾收集频繁或内存分页到磁盘,两者均会降低应用性能,进而增大 UI 延迟。
有关 SignalR 和 Blazor 的详细信息,请参阅以下内容:
- 托管和部署 ASP.NET Core Blazor Server
- ASP.NET Core Blazor Server 的威胁缓解指南
连接到服务器
只要客户端的状态仍在服务器的内存中,客户端会话即可恢复,且不会失去状态。
使用多个后端服务器的 Blazor Server 应用应实现粘滞会话,从而建立 SignalR 连接。
有关详细信息,请参阅 托管和部署 ASP.NET Core Blazor Server。
有关详细信息,请参阅使用应用程序请求路由实现 HTTP 负载均衡。