Blazor托管模型

Blazor当前具有两种托管模型,服务器端Blazor和Web Assembly。服务器端托管于2019年9月发布,Web Assembly于2020年5月正式发布。

Blazor Web Assembly

优点

Web Assembly在浏览器内部的客户端上运行,因此可以将其部署为静态文件。尽管如此,由于浏览器安全限制,Blazor Wasm应用程序将无法直接从本地文件系统运行。

Blazor Wasm可以离线工作。当与服务器的网络连接断开时,客户端应用可以继续运行(显然,它无法与服务器通信以检索新数据)。

它也可以很容易地作为渐进式Web应用程序运行,这意味着客户端可以选择将我们的应用程序安装到他们的设备上,并在需要时运行它,而无需任何网络访问。

在客户端计算机上运行代码后,这意味着服务器负载将大大降低。

缺点

blazor.webassembly.js文件引导客户机应用程序。它会下载所有必需的.NET DLL程序集,这使应用程序的启动时间比服务器端的启动时间慢。

Mono框架解释.NET中间语言,因此比运行服务器端Blazor慢。计划提前发布(AOT)未来版本。

Blazor Wasm尚不支持单个线程,因此所有处理都在UI线程上进行-尽管对服务器/ JavaScript等的调用是异步发生的,所以不要阻塞UI的响应能力。

此外,Blazor Wasm仅在较新的浏览器上有效,并且对搜索引擎不友好(除非我们启用服务器端预渲染)。

Blazor server-side

优点

Blazor服务器端在将HTML内容发送到客户端的浏览器之前对其进行预翻译。这使其对搜索引擎友好,并且没有明显的启动时间。

Blazor服务器端应用程序可以在较旧的浏览器上运行,因为不需要Web汇编,仅需要HTML和JavaScript。当代码在服务器上执行时,也可以在Visual Studio中调试我们的.NET代码。

缺点

Blazor服务器端为当前客户端设置了一个内存中会话,并使用SignalR在服务器上运行的.NET与客户端的浏览器之间进行通信。对于所有用户而言,所有内存和CPU的使用都会对服务器造成一定的影响。这也意味着客户端与首先为其提供服务的服务器绑定在一起,因此不适用于负载平衡。

呈现初始页面并将其发送到浏览器后,blazor.server.js文件会挂接到浏览器中任何相关的用户交互事件,以便它可以在用户和服务器之间进行调解。例如,如果呈现的元素已注册@onclick事件,则blazor.server.js将挂接到其JavaScript click事件中,然后使用其SignalR连接将该事件发送到服务器并执行相关的.NET代码。

<p>
  Current count = @CurrentCount
</p>
<button @οnclick=IncrementCount>Click me</button>
@code
{
  private int CurrentCount;
  public void Increment()
  {
    CurrentCount++;
  }
}

.NET代码完成后,Blazor将重新呈现页面上的组件,然后将增量HTML包发送回客户端的浏览器,以便它可以更新其显示而不必重新加载整个页面。

如果我们运行标准的Blazor应用程序,请单击菜单中的“计数器”链接,然后单击“单击我”按钮,我们可以观察到与服务器之间的SignalR数据通信。

  1. 在Chrome浏览器中运行该应用。
  2. 点击应用菜单中的“计数器”链接。
  3. 按F12打开浏览器的开发人员工具。
  4. 在开发人员工具窗口中,单击“网络”选项卡。
  5. 重新加载页面。
  6. 接下来,单击WS选项卡(WebSocket的缩写)。
  7. 单击_blazor项以显示套接字数据。
  8. 单击“单击我”按钮将显示类似以下的网络流量(经过简化和格式化以便于阅读)。
    DispatchBrowserEvent
      {
        "browserRendererId": 0,
        "eventHandlerId": 3,
        "eventArgsType": "mouse",
        "eventFieldInfo": null
      }
      {
        "type": "click",
        "detail": 1,
        "screenX": 338,
        "screenY": 211,
        "clientX": 338,
        "clientY": 109,
        "button": 0,
        "buttons": 0,
        "ctrlKey": false,
        "shiftKey": false,
        "altKey": false,
        "metaKey": false
      }

这导致服务器的响应类似于以下内容:

注意:突出显示的1表示增量HTML,并且是计数器的新值。

如果客户端的浏览器和服务器未关闭或它们之间的网络连接很慢,则这种往返可能会带来缓慢的体验,尤其是在触发状态更改的事件频繁发生时。例如,诸如onmousemove之类的事件将非常频繁地触发。

此外,需要大的HTML增量更新的更改也可能很慢。例如,如果我们要在页面中包含一个HTML组件,以更新显示区域以在用户键入时预览用户的输入,随着服务器中每个字符的添加,来自服务器的HTML 也会增加。当输入内容变大时,每次按键都会导致大量的网络传输。

与Blazor Wasm不同,一旦从浏览器到服务器的连接丢失,应用程序将变得无响应。 Blazor将尝试重新建立与服务器的连接,但是,直到连接成功,应用程序会显示消息“尝试重新连接至服务器…”,并阻止所有鼠标与用户界面的交互。

Blazor 移动绑定

2020年1月,微软宣布推出Blazor Mobile Bindings,这是一个实验项目,允许开发人员使用Blazor和Xamarin.Forms(XAML)的Razor变体组合构建本地移动应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cool2Feel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值