前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解 .NET 8 中的 Blazor 新特性 - .NET Conf 2023实况直击

图解 .NET 8 中的 Blazor 新特性 - .NET Conf 2023实况直击

作者头像
JusterZhu
发布2023-11-17 14:06:53
1K0
发布2023-11-17 14:06:53
举报
文章被收录于专栏:JusterZhuJusterZhu

一年一度的.NET Conf 大会在今日凌晨零点开播,我跟Blazor中文社区的很多朋友都熬夜观看了。在开场概括演说之后,Blazor是排在第一个出场的,可见Blazor在新版.Net中的地位依然是重中之重。

上图是开场keynote的演示,全新改版的官方示例项目EShop,它也是贯穿了从开场到云原生工具.NET Aspire介绍时都用到的示例应用。

这个应用已经引入了.NET 8的众多新特性,特别是前端部分引入了Blazor full stack 眼花缭乱的新特性。

出场的依然是两位Blazor负责人,Blazorx项目的开发经理丹尼尔和Blazor之父史蒂夫。

标题虽然跟前几年一样,《使用Blazor构建交互性丰富的WebUI》,但是内容已经与以往的完全不同。

这一次带来了更快的Blazor。还一语双关,更快地构建、构建更快的Web apps。

这个PPT是个动画,意思是把server和client合并在一起了,变成全栈WebUI。并且把Blazor的各大功能重新排位,重点已经不在server和wasm,而是从静态的服务器端渲染、增强导航与路由、流式渲染、单组件/页面的交互性、最后再到运行时自动切换交互性渲染模式。

这些特性下文一一介绍。

静态服务端渲染

抱歉这个PPT忘截了。但是我从网上看到了Steve在另外一个演讲中的PPT,我认为是更能反映出Blazor要做静态服务端渲染的初衷。

图中介绍的是整个Web发展史:

90年代-2005:是服务端渲染HTML的阶段。.Net这边是asp和webforms。感谢Webforms在这个时代就带来了完美的开发与交互体验。

2005-2010 是服务端HTML+与js结合的阶段,主要是利用jQuery实现方便的dom操作。.Net这边还是ASP.NET aspx时代。

2010-2015 是早期客户端渲染,angularjs、knockout等。.NET这边是MVC时代。

2015-2022 是现代客户端渲染阶段,也是单页应用。我们熟悉的react、vue、angular属于这个阶段。而Blazor在2019年发布总算是赶上了末班车。

到了今年,各大前端框架都在做服务端组件,包括最新的react和angular,都不同程度借鉴了blazor server的特性。

交互性

交互性在此前很少提到,只有在Blazor的口号——“使用C#而不是JS来构建交互性WebUI”中有提到,因为此前Blazor默认就是富交互性的。而.NET8引入服务端渲染和更多交互性层次之后,就需要大家去理解了。

前面讲的“静态”渲染,是“交互性”的程度最低的。

从 .NET 8 开始,Blazor从以前的全局交互性变为页面级和组件级交互性。意思就是全局默认是静态的,可以在局部选择交互性渲染方式。目前可选的交互性渲染方式有 Streaming SSR、Blazor Server、Blazor WebAssembly。

Streaming SSR是可以让在一次服务端请求中,让服务端连续返回html。先返回静态的内容,再返回需要查询数据库或其他较慢处理的内容。示例中Steve示范了一个倒计时。在一个下单请求中首先返回Blazor页面静态渲染的html,然后返回不同的数字的html节点,浏览器上的blazor.web.js自动替换掉静态页面中的占位符。

Streaming SSR的优势是能够加速首次渲染。不必等待所有数据都获取之后才返回所有内容。我之前用MVC做过CMS项目,一个页面很多内容都需要查询,响应时间很久。如果用 Streaming SSR,就能马上呈现静态的页面布局了。

增强导航,

能够让页面间的跳转变得像单页面一样。这个特性其实就是之前的pajx。无刷新跳转。只替换有变动的dom节点。但是Blazor的这个是服务端支持的,在页面跳转时,在服务端就计算变化的节点,然后只返回有变化的节点。这样能够节省请求流量、保持大多数的dom。注意事项是需要考虑JS的状态。

静态渲染表单。这是静态渲染重要的服务端交互方式。此前是通过事件来实现模型绑定,而SSR则是通过HTTP请求来做模型绑定。表单验证也变为服务端的,返回的验证信息就是通过上文的Streaming SSR实现。这个特性时静态渲染在一定程度上实现了交互性。

交互性组件就是原有的Blazor Server/Blazor WebAssembly组件。能够灵活地集成到静态渲染页面中,并且能够与增强导航和表单一起工作。

交互性组件最重要的更新,就是实现了自动模式。自动模式可以让组件/页面先使用Server实现交互性,同时后台加载WebAssembly文件,加载完后,自动切换到 WebAssembly。

来个大总结。

最后还有One more thing。就是全新的All in one 模板。把之前的两个Blazor模板和这次的全部功能集成到一个模板中,通过配置选项来根据需求选择需要的渲染模式、示例内容等等。

特别是授权类型这个选项,选择个人授权后,模板中就包含是整个Identity UI,从注册登录到用户管理都在里面了。而且是使用SSR实现类的,对学习SSR的朋友非常有帮助。

另外最新版的VS还支持了Blazor页面脚手架,终于可以跟MVC/Razor Pages一样通过VS点点鼠标就创建一个CRUD页面了!

新增页面

列表页面用了QuickGrid。有我的代码贡献!这下我再也不用担心大家不会写Blazor了!

最后的最后,丹尼尔做了个总结,如果想让已有应用能够使用 .NET 8 中 Blazor 带来的型特性,可以根据这个指引来实施。

1. 如果是已有的 Blazor 应用,那么只需要升级到 .NET 8 即可。

2. 如果是 ASP.NET Core app,可以添加 Blazor 页面。

3. 对于已有的MVC/Razor Pages项目,也可以通过 <component> tag helper 来引入 Blazor 组件。

4. 对于 Minimal APIs/Controllers 项目,还可以返回 RazorComponentResult 来返回 Blazor 页面。

5. 如果 api 还配合了JS前端框架,那么也可以通过 custom element 来引入 Blazor 组件和页面。

这个指引是递进的,适应在不同场景中集成 Blazor。

总得来说,SSR 能够解决前台用户侧的场景,Auto模式能够解决加载慢和网络问题。作为Blazor的老用户,我认为Auto模式是很强的功能,基本上解决了Blazor一直以来被诟病的加载问题和网络问题。但是要注意的是数据请求方式和组件状态的切换。请求方式需要从server的直接访问数据库切换为API调用,这就需要用户实现两套方法。Blazor只自动处理一部分状态的切换,更多的需要用户自己处理。

这两点我已经这最近两个月有所探究,总结了一些可以方面实现的方法和结合两者的布局模板。打算在下个月16号 .NET Conf China 大会给大家分享并带来更多内容。

诚邀赞助

AntDesign Blazor 项目和 Blazor 中文社区预计将会在 12月16日到北京参加 .NET Conf China 大会。届时打算会对 Blazor 和 AntBlazor 项目进行社区推广。

但不论是我们的开源项目、社区还是这次活动,都是为爱发电和非盈利的,如果antblazor与社区对你有所帮助,请赞助支持,以支持我到北京的路费和推广物料费用。

所有费用收支都会在antblazor项目的赞助名单中公开。对于大额捐助,可以在我们的项目网站和今后推广中提供品牌推广。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档