首页 > 其他分享 >.NET8 Blazor新特性 流式渲染

.NET8 Blazor新特性 流式渲染

时间:2023-11-19 09:14:18浏览次数:40  
标签:Razor 响应 渲染 流式 耗时 NET8 Blazor

什么是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,来更明显的体验。

@page "/weather"
@attribute [StreamRendering]

<PageTitle>Weather</PageTitle>

<h1>Weather</h1>
......
}

@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中的<script src="_framework/blazor.web.js"></script>。删掉后发现第二次响应已经渲染不了了。

标签:Razor,响应,渲染,流式,耗时,NET8,Blazor
From: https://www.cnblogs.com/chenyishi/p/17839086.html

相关文章

  • NET8 ORM 使用AOT SqlSugar
    AOT介绍.Net8的本地预编机器码AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。 支持功能 SqlSugarORM使用......
  • MAUI + MASA Blazor .NET8 升级指南
    目录前言准备1、首先确保已经将VS升级到VisualStudio202217.8版本以上。2、下载安装.NET8.0升级项目1、将项目的目标.NET运行时修改为net8.02、添加依赖包引用3、升级依赖包4、升级Xcode5、测试打包前言Net8修复了MAUI中的很多Bug,还增加了很多新功能,例如:AndroidStripILAft......
  • Photino.Blazor 升级.net8.0 记事
    趁着Photino.Blazor作者还没升级.net8之际,我发布版将photino.Blazor-2.6.0发布版升级到.Net8。1首先下载photino.Blazor-2.6.0的发布版https://github.com/tryphotino/photino.Blazor/releases/tag/v2.6.02。将所有项目升级最新.net8.0 3.将引用包都升级到最新版,重点是......
  • .net 6,7 如何升级到最新的.net8
    .net8微软于2023.11.15日已发布据说.net8速度提升20%相比.net7,大家快快来升级吧.net6,7如何升级到最新的.net8安装.net8SDK,vs202217.8版本自带.net8SDKhttps://dotnet.microsoft.com/download/dotnet/8.02.替换所有的.NETSDK版本:编辑解决方案所有项目的.csproj......
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
    2023年11月15日,对.net的开发圈是一个重大的日子,.net8.0正式版发布。圈内已经预热了有半个月有余,性能不断超越,开发体验越来越完美,早在.net5.0的时候就各种吹风Aot编译,直到6.07.0使用仍然比较麻烦,我个人比较期待本次更新的aot体验。有的群友几个小时都等不了啦,半夜就开始更新预......
  • java8 stream api流式编程
    ......
  • .NET8依赖注入新特性Keyed services
    什么是KeyedserviceKeyedservice是指,为一个需要注入的服务定义一个KeyName,并使用使用KeyName检索依赖项注入(DI)服务的机制。使用方法通过调用AddKeyedSingleton(或AddKeyedScoped或AddKeyedTransient)来注册服务,与KeyName相关联。或使用[FromKeyedServices]属性指......
  • net8发布
    11月15日开始的为期三天的.NETConf在线活动的开幕日上,.NET8作为微软的开源跨平台开发平台正式发布。.NET团队着重强调云、性能、全栈Blazor、AI和.NETMAUI是.NET8的主要亮点。。NET团队在 .NETConf2023 [1]活动开幕式上表示:“通过这个版本,.NET重塑了我们构建按......
  • ChatGPT流式输出实现原理
    consthttp=require("http");constfs=require("fs");constserver=http.createServer((req,res)=>{if(req.url==="/events"){//设置响应头,指明使用text/event-stream类型res.writeHead(200,{"Content-T......
  • 使用 AJAX、PHP 和服务器发送事件从 OpenAI 的 API 流式传输数据
    如何使用服务器发送事件(SSE)将数据从上述API流式传输到使用JavaScript和PHP的浏览器客户端?我已经研究这个问题好几个小时了,但我似乎无法弄清楚出了什么问题。作为参考,我尝试在这里调整解决方案:StreamDATAFromopenaiGPT-3APIusingPHP我的代码的其余部分或多或少与上......