.NET Core 3.0中的Blazor服务器使用方案和性能

自上个月带.NET Core 3.0的Blazor Server发布以来,许多人与我们分享了他们仅使用.NET和C#即可创建基于Web的客户端界面的热情。 同时,我们还听到了许多有关Blazor Server是什么,如何与Blazor WebAssembly关联以及在什么情况下最适合Blazor Server的问题。 我应该为客户端Web界面选择Blazor服务器还是等待Blazor WebAssembly? 这篇文章旨在回答这些问题,并提供有关Blazor服务器如何大规模运行以及我们如何看待Blazor未来发展的想法。



什么是Blazor服务器?


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



由于Blazor服务器应用程序在服务器上的.NET Core中运行,因此它们充分利用了运行.NET Core的优势,包括出色的运行时性能和使用高级工具。 Blazor Server应用程序可以使用.NET Standard库的整个生态系统,而不受任何浏览器限制。

什么时候应该使用Blazor Server?


Blazor Server允许您在不需要JavaScript的情况下向.NET应用程序添加丰富的交互式界面。 如果要在.NET应用程序中进行一页应用程序交互,那么Blazor Server是一个很好的解决方案。

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

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

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

使用Blazor Server进行扩展


Blazor Server可以从小型内部业务应用程序扩展到大型Internet应用程序。 当.NET Core 3.0仍处于预览状态时,我们测试了Blazor Server,以了解扩展的工作原理。 我们将Blazor Server应用程序置于活动客户端的负载下,并监视用户交互的延迟。 在我们的测试中,Azure中Standard_D1_v2的一个实例(1个vCPU,3.5 GB内存)可以处理5000个以上的并发用户,而不会减少延迟。

Standard_D3_V2实例(4个vCPU,14 GB内存)处理了超过20,000个并发运行的客户端。 进一步处理负载的主要瓶颈是可用内存。 您是否在自己的应用程序中达到了这种规模? 这在很大程度上取决于每个用户您的应用程序需要多少额外的内存。 但是对于大多数应用程序,我们发现这种扩展级别相当合理。 我们还计划在未来几周内发布其他更新,以改善Blazor Server的可伸缩性。 敬请期待!

什么是Blazor WebAssembly?


Blazor是一个可以在不同环境中工作的用户界面框架。 使用Blazor创建用户界面组件时,您可以灵活选择放置和启动它们的方式和位置。 除了使用Blazor Server在服务器上运行用户界面组件之外,您还可以使用Blazor WebAssembly在客户端上运行相同的组件。 这种灵活性意味着您可以适应用户的需求,并避免与特定的应用程序托管模型绑定的风险。

Blazor WebAssembly应用程序使用基于WebAssembly的.NET运行时在浏览器中托管组件。 组件处理用户界面事件并直接在浏览器中执行渲染逻辑。 Blazor WebAssembly应用程序仅使用开放的Web标准来运行.NET客户端代码,而无需任何浏览器插件或代码移植。 与Blazor Server应用程序一样,Blazor平台将处理的输出与以前显示的内容进行比较,并相应地更新DOM,但是在Blazor WebAssembly中,用户界面呈现是在客户端进行的。



我什么时候需要使用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可以完全脱机工作。

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

在Web应用程序中包含.NET运行时会增加应用程序的大小,从而影响加载时间。 尽管有多种方法可以缓解此问题(在服务器上进行预渲染,HTTP缓存,IL连接等),但对于对负载大小和时间非常敏感的应用程序,Blazor WebAssembly可能不是最佳选择。下载。

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

Blazor WebAssembly已针对用户界面呈现方案进行了优化,但当前不适合执行沉重的处理器负载。 如今,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可以支持独立脚本,推送通知和OS集成,例如支持将应用程序固定到主屏幕或Windows“开始”菜单。
  • Blazor混合:混合应用程序是使用Web技术作为用户界面的嵌入式应用程序。 示例包括出现在网络视图中的电子应用程序和移动应用程序。 Blazor混合应用程序不在WebAssembly上运行,而是使用它们自己的.NET运行时,例如.NET Core或Xamarin。 您可以在GitHub上找到将Blazor与Electron结合使用的实验示例
  • Blazor本机:Blazor应用程序现在可以呈现HTML,但是可以通过显示本机控件来代替呈现器。 Blazor本机应用程序最初在设备上启动,并使用用户界面的通用抽象来可视化此设备的本机控件。 这非常类似于Xamarin Forms或React Native等框架今天的工作方式。

这三种新产品目前正在试验中。 我们预计将在.NET 5期间(2020年11月)正式宣布支持使用Electron的Blazor PWA和Blazor Hybrid应用程序。 目前尚没有支持Blazor Native的路线图,但这是我们正在积极探索的领域。

合计


使用.NET Core 3.0,您现在可以使用Blazor Server创建丰富的交互式客户端用户界面。 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-CN473172/


All Articles