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

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

661701657704c3d98c0cfd417372d88d.jpeg

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

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

e12e8a9c7d5d7dc5511e3ec99cb05318.jpeg

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

53ea2c7f5c0fb6f076684e930a04c902.jpeg

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

036cd9767423007102f17f2006d210ed.jpeg

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

294c22d2ff17415c72e294ac24d75a33.jpeg

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

这些特性下文一一介绍。

静态服务端渲染

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

b2801c399ba1e836d1ba94587f8c0060.jpeg

图中介绍的是整个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的特性。

4ebfedec21c3fd6c77cc208f7ecacf3d.jpeg

交互性

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

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

ffb22be66b50562c8c33d1ad9d5d3a50.jpeg

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

39046aec8a875c404d5a1308ecc8f543.jpeg

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

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

b74647565e14867a7df8e07c4584b406.jpeg

增强导航,

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

eeb2e21c4fa8a393e4aaefcdcd23f06c.jpeg

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

3f517b2d31dedad037b6c4e82c0f5139.jpeg

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

38b59f5edf2c803b6816de792252cca9.jpeg

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

1d52acbfc3914cadbf8c3c8ff399e5e8.jpeg

来个大总结。

2e6b8115bba9b38c9f7c247999b5c3e8.jpeg

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

871fa4eb34fa90f3c1a6d7916bda2326.jpeg

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

8c92d21b26a2ab7407e1dadec3b93a7b.png

3ac1c28f8db08ab02d764bf29212caec.jpeg

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

5d90147fa9cdca69b99b4850c56a3490.jpeg

新增页面

3880fe0c86e6fc39dbee336c78516c1c.jpeg

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

853506ef47982fa23692d9c2bde171f5.jpeg

最后的最后,丹尼尔做了个总结,如果想让已有应用能够使用 .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。

da453b32a7f06d0b50aa23345dd7e1c9.jpeg

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

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

诚邀赞助

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

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

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

请点下方赞赏按钮,也可以加我微信 JamesYeungMVP 联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值