.NET Core 3.0方案中的Blazor Server和性能

自上月发布带有.NET Core 3.0的Blazor Server以来,许多人与我们分享了他们的兴奋之处,他们能够仅使用.NET和C#构建客户端Web UI。 同时,我们还听到了很多有关Blazor Server是什么,Blazor WebAssembly与它之间的关系以及Blazor Server最适合的方案的问题。 您应该选择Blazor服务器来满足客户端Web UI的需求,还是等待Blazor WebAssembly? 这篇文章旨在回答这些问题,并提供有关Blazor Server如何大规模执行以及我们如何展望Blazor未来发展的见解。

什么是Blazor服务器?


Blazor服务器应用程序在服务器上托管Blazor组件,并通过实时SignalR连接处理UI交互。 当用户与应用程序进行交互时,UI事件通过连接发送到服务器,由组成应用程序的各种组件处理。 当组件处理UI事件时,将根据其更新状态对其进行呈现。 Blazor将新渲染的输出与先前渲染的输出进行比较,然后将更改发送回浏览器,并将其应用于DOM。



由于Blazor Server应用程序在服务器上的.NET Core上运行,因此它们享受在.NET Core上运行的所有好处,包括出色的运行时性能和工具。 Blazor Server应用程序可以利用.NET Standard库的完整生态系统,而不受任何浏览器的限制。

我什么时候应该使用Blazor Server?


Blazor Server使您能够立即将丰富的交互式UI添加到.NET应用程序中而无需编写JavaScript。 如果您需要.NET应用程序中单页应用程序的交互性,那么Blazor Server是一个很好的解决方案。

Blazor Server可用于编写全新的应用程序或补充现有的MVC和Razor Pages应用程序。 无需重写现有的应用逻辑。 Blazor旨在与MVC和Razor Pages一起使用,而不是替换它们。 在使用Blazor进行客户端UI交互时,您可以继续使用MVC和Razor页面来满足服务器渲染的需求。

Blazor Server最适合您具有可靠的低延迟网络连接的情况,通常,当客户端和服务器位于同一大陆时,这是可以实现的。 需要在每次微小的鼠标抽动时立即进行极高保真度即时更新的应用程序,例如实时游戏或绘图应用程序,都不适合Blazor Server。 由于Blazor Server应用程序需要活动的网络连接,因此不支持脱机方案。

当您要将工作从客户端转移到服务器时,Blazor Server也很有用。 Blazor Server应用程序仅需少量下载即可建立与服务器的连接并处理UI交互。 然后,在服务器上完成运行应用程序逻辑和呈现UI的所有艰苦工作。 这意味着即使应用程序功能不断增长,Blazor Server应用程序也可以快速加载。 由于Blazor Server应用程序的客户端非常薄,因此对于需要在低功耗设备上运行的应用程序而言,这是一个很好的解决方案。

大规模使用Blazor Server


Blazor Server可以从小型内部业务应用程序扩展到大型Internet规模应用程序。 当.NET Core 3.0仍处于预览状态时,我们对Blazor Server进行了测试,以查看其基线比例特征。 我们将Blazor Server应用程序置于活动客户端的负载下,并监视了用户交互的延迟。 在我们的测试中,Azure上的一个Standard_D1_v2实例(1个vCPU,3.5 GB内存)可以处理5,000多个并发用户,而不会降低延迟。

一个Standard_D3_V2实例(4个vCPU,14GB内存)可以很好地处理超过20,000个并发客户端。 处理更多负载的主要瓶颈是可用内存。 您会在自己的应用中看到这种规模的扩展吗? 这在很大程度上取决于每个用户您的应用程序需要多少额外的内存。 但是对于许多应用程序,我们认为这种水平的扩展是相当合理的。 我们还计划在未来几周内发布有关Blazor Server可扩展性改进的其他更新。 敬请期待!

什么是Blazor WebAssembly?


Blazor是可以在不同环境中运行的UI框架。 使用Blazor构建UI组件时,您可以灵活选择托管和运行方式以及托管方式。 除了使用Blazor Server在服务器上运行UI组件外,还可以使用Blazor WebAssembly在客户端上运行这些相同的组件。 这种灵活性意味着您可以适应用户的需求,并避免被捆绑到特定应用托管模型的风险。

Blazor WebAssembly应用程序使用基于WebAssembly的.NET运行时在浏览器中托管组件。 这些组件处理UI事件并直接在浏览器中执行其呈现逻辑。 Blazor WebAssembly应用程序仅使用开放的Web标准来在客户端运行.NET代码,而无需任何浏览器插件或代码转换。 就像使用Blazor Server应用程序一样,Blazor框架会处理新呈现的输出与先前呈现的输出之间的比较,并相应地更新DOM,但使用Blazor WebAssembly时,UI呈现是在客户端处理的。



我什么时候应该使用Blazor WebAssembly?


Blazor WebAssembly仍在预览中,尚未准备好用于生产。 如果您正在寻找可用于生产的解决方案,那么我们建议使用Blazor Server。

Blazor WebAssembly交付后(2020年5月),它将启用在用户设备的浏览器中运行Razor组件和.NET代码的功能。 Blazor WebAssembly应用程序帮助将工作从服务器转移到客户端。 Blazor WebAssembly应用程序可以利用客户端设备的计算,内存和存储资源,以及通过标准浏览器API提供的其他资源。

Blazor WebAssembly应用程序不需要在服务器上使用.NET,可用于构建静态网站。 Blazor WebAssembly应用程序只是一堆静态文件,可以使用任何静态网站托管解决方案来托管,例如GitHub页面或Azure静态网站托管。 与服务人员结合使用时,Blazor WebAssembly应用程序可以完全脱机运行。

与服务器上的.NET结合使用时,Blazor WebAssembly可以进行完整堆栈的Web开发。 您可以共享代码,利用.NET生态系统,并重用现有的.NET技能和基础结构。

在Web应用程序中包含.NET运行时会增加应用程序的大小,这会影响加载时间。 尽管有多种技术可以减轻这种情况(服务器上的渲染,HTTP缓存,IL链接等),但对于下载大小和加载时间非常敏感的应用程序,Blazor WebAssembly可能不是最佳选择。

Blazor WebAssembly应用程序还需要支持WebAssembly的浏览器。 所有现代浏览器(包括移动和桌面浏览器)都支持WebAssembly。 但是,如果您需要支持不支持WebAssembly的旧版浏览器,那么Blazor WebAssembly不适合您。

Blazor WebAssembly已针对UI渲染方案进行了优化,但目前不适用于运行CPU密集型工作负载。 今天的Blazor WebAssembly应用程序使用.NET IL解释器来执行.NET代码,其性能与JIT编译的本机.NET运行时不一样。 将来,我们将通过添加对将.NET代码直接编译到WebAssembly而不是使用解释器的支持,来更好地解决这种情况。

你以后可以改变主意


无论您选择Blazor Server还是Blazor WebAssembly,都可以在以后随时改变主意。 所有Blazor应用程序均使用通用组件模型Razor组件。 可以在Blazor Server应用程序或Blazor WebAssembly应用程序中托管相同的组件。 因此,如果您从一个Blazor托管模型开始,然后又决定要切换到另一个,则很简单。

Blazor的下一步是什么?


在发布Blazor WebAssembly之后,我们计划扩展Blazor,使其不仅支持Web应用程序,还支持渐进式Web应用程序(PWA),混合应用程序甚至完全本机应用程序。

  • Blazor PWA:PWA是利用最新Web标准来提供更原生体验的Web应用程序。 PWA可以支持脱机方案,推送通知和操作系统集成,例如支持将应用程序固定到主屏幕或Windows“开始”菜单。
  • Blazor Hybrid:混合应用程序是使用Web技术用于UI的本机应用程序。 示例包括可呈现为Web视图的Electron应用程序和移动应用程序。 Blazor Hybrid应用程序不在WebAssembly上运行,而是使用本机.NET运行时(如.NET Core或Xamarin)。 您可以在GitHub上找到将Blazor与Electron结合使用的实验示例
  • Blazor本机:Blazor应用程序现在可以呈现HTML,但是可以替换呈现器以呈现本机控件。 Blazor本机应用程序在设备上本机运行,并使用通用的UI抽象来呈现该设备的本机控件。 这非常类似于Xamarin Forms或React Native等框架今天的工作方式。

这三个努力目前都处于试验阶段。 我们预计将在.NET 5时间框架(2020年11月)中正式支持使用Electron支持Blazor PWA和Blazor Hybrid应用程序。 还没有支持Blazor Native的路线图,但这是我们正在积极研究的领域。

总结


使用.NET Core 3.0,您现在可以使用Blazor Server构建丰富的交互式客户端UI。 Blazor Server是使用现有.NET技能和资产将客户端功能添加到现有和新Web应用程序的好方法。 Blazor Server的构建旨在满足您所有Web应用程序的需求。 Blazor WebAssembly仍在预览中,但预计将于明年5月发布。 将来,我们希望Blazor继续发展以支持PWA,混合应用程序和本机应用程序。 现在,我们希望您可以通过安装.NET Core 3.0来尝试Blazor Server!

Source: https://habr.com/ru/post/zh-CN473146/


All Articles