翼度科技»论坛 编程开发 .net 查看内容

.NET8 Blazor新特性 流式渲染

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
什么是SSR
Blazor中的流式渲染结合了SSR(服务端渲染),服务端将HTML拼好返回给前端,有点像我们熟知的Razor Pages 或 MVC 。



当已经有了 Razor Pages 或 MVC 时,为什么还要选择使用 Blazor 来实现这一点?这里有几个原因。
首先,Razor Pages 和 MVC 没有像Blazor这样提供了很好的可重用组件。
其次,当选择 Razor Pages 或 MVC 时,我们将被固定在SSR渲染应用程序中。
如果您想添加任何客户端交互性,一种选择是JS另一种选择是Blazor。那么为什么不只使用 Blazor 来完成所有事情呢?
 
什么是流式渲染
用户常遇到长耗时的处理,比如查询数据库,通常的处理方式是等长耗时处理结束,再响应给浏览器,用户体验比较差。
而流式渲染将响应拆为多次。第一次响应很快返回客户端,并使用占位符内容快速渲染整个页面,同时执行比较耗时的异步操作。
耗时操作完成后,新的内容将使用与前一次响应相同的连接,发送到客户端,并更新到DOM中。
这样用户不需要等待耗时地操作,就可以看到一个包含占位符地页面,可以很好地改善用户体验。

 
体验Blazor流式渲染
Blazor中的流式渲染只需要在组件上添加指令@attribute [StreamRendering(true)]即可生成一个流式渲染组件。
我们可以根据VS中的Blazor Web APP模板创建一个Server渲染方式的项目

创建完后,其中的Weather组件,默认开启了流式渲染  @attribute [StreamRendering] 。我们可以将OnInitializedAsync中的delay事件改为5000,来更明显的体验。
  1. @page "/weather"@attribute [StreamRendering]Weather[size=6]Weather[/size]
  2. ......}@code {    protected override async Task OnInitializedAsync()    {        // Simulate asynchronous loading to demonstrate streaming rendering        await Task.Delay(5000);        .......    }}
复制代码
启动后可以看到weather请求,其实是一个get请求,这里体现了Blazor的Stream Rendering组件其实用了SSR方式。

5s后剩余的数据在同一个连接中返回

 
谁对多次响应进行了处理
其实是blazor.web.js拦截了多次响应,并将其渲染到对应位置。想要测试的话可以尝试删掉App.razor中的。删掉后发现第二次响应已经渲染不了了。

来源:https://www.cnblogs.com/chenyishi/archive/2023/11/19/17839086.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具