之前写了一篇文章《快速了解 ASP.NET Core Blazor》,大家关心最多的问题是,我该不该花时间去学习 Blazor。今天聊聊这个话题,并表达一下我个人的看法。

在此之前,我还是想不厌其烦的介绍一个 Blazor。

Blazor 是微软 .NET 团队开发的一个新的 UI 框架,目前生态发展的还不错。仅国内就出现了不少成熟的 UI 框架,比如基于 Ant Design 的企业级组件库 ant-design-blazor[1]、基于 ElementUI 的 element-blazor[2] 和基于 Bootstrap 的 BootstrapBlazor[3] 等,这些开源项目的发起人都是国内开发者。另外,你可以在 GitHub 的 awesome-blazor[4] 项目查看更丰富的 Blazor 资源。

要更好地了解 Blazor,必定要先知道 WebAssembly 是什么。

WebAssembly 与 .NET 无关,WebAssembly 已经慢慢开始普及被采用。简单来说,WebAssembly 是一种新的、类似汇编的网络语言。它可以在浏览器中运行,并且支持所有现代浏览器。由于经过高度优化,所以运行速度快,接近本地应用。

重要的是,WebAssembly 不是一种绝大多数开发者都会写的语言,而是用来作为编译目标的。你可以将代码针对特定的处理器或操作系统编译成 WebAssembly,然后让你的程序在浏览器中运行。

理解了 WebAssembly,我们再来正式介绍一下 Blazor。

在概念上,Blazor 更像是 Vue 或 React,而不是 ASP.NET Core MVC。它是一个基于组件的框架,用于构建丰富的交互式 Web 应用程序。Blazor 与传统 JavaScript 框架的主要区别在于,Blazor 组件完全用 C# 和 Razor 编写,不需要用到 JavaScript,但可以和 JavaScript 交互。

Blazor 有两种模式。一种是在服务器端运行再实时渲染到浏览器,叫服务端模式;一种是在客户端使用 WebAssembly 运行,叫 WebAssembly 模式。两种模式都使用了相同的面向组件的架构,但在运行这些组件的方式上却有很大的不同。

服务端模式,就是渲染代码的工作在服务器上运行,它使用 SignalR(一个用于管理客户端和服务器之间的实时连接的 .NET 库)将事件从浏览器发送到服务器,并将 DOM 的差异部分发送到浏览器进行渲染。即,服务端模式是服务器渲染你的组件并通过 SignalR 管理交互。

WebAssembly 模式,更容易理解一些。所有的代码,包括框架和你的组件,都在浏览器中运行。你的 C# 代码像其他 .NET 应用程序一样被编译成 DLL,随后 DLL 被发送到浏览器,然后在浏览器中运行你的代码。打开浏览器开发者工具,在第一次加载页面时,你可以看到它会下载一堆的 DLL。

这两种模式都有各自的优势。服务端模式在浏览器中的工作较少,但由于涉及到网络,用户界面交互会有一些延迟。WebAssembly 模式,运行速度较快,但第一次加载较慢,需要下载 DLL,加起来大约有 2M 的样子。

这就是 Blazor。现在说说我个人对 Blazor 的看法。

对于 Blazor,最大的优点是前后端代码的共用以及组件的重用,而且可以不需要 JavaScript,极大简单了开发工作流。

从我的体验来说,我不太满意 Blazor 的服务端模式,因为大部分交互都要经过网络,这就导致少许延迟,体验不是很好。服务端模式不适合实时性要求较高的应用,比较适合供外网访问的网站,比如公司官网和要求利于 SEO 的网站。

Blazor 的未来,我看好的是 WebAssembly 模式。性能上,WebAssembly 接近于本地应用。相对本地应用,它的好处是不需要安装,不需要在客户端升级,可以说是结合了本地应用和 Web 网页的优点。而且基于 Blazor 的 WebAssembly 应用可以创建为 PWA(Progressive Web App),以实现离线支持。

WebAssembly 是未来的趋势,但要被普遍性采用,还有一段较长的路要走。首批会采用 WebAssembly 的应用会是面向企业内部的应用,比如企业的 ERP、CRM 等应用。目前各大主流浏览器都已支持 WebAssembly,这一点也证明各大浏览器厂商推 WebAssembly 技术的决心。

相较于其它语言平台,基于 .NET 平台的 Blazor 在 WebAssembly 发展方面目前处于绝对的领先,更具有前瞻性。另外,群友分享的最新消息:微软公布,在 .NET 6 中,Blazor 将增加支持基于 Web 渲染的跨平台桌面应用[5]。在我看来,借助 C# 语言和 WebAssembly 性能的优势,未来 Blazor 有望接替 Electron 的位置,成为跨平台桌面应用的新霸主。

我个人非常看好 Blazor 的未来发展。对于已有 ASP.NET Core 开发经验的人来说,学习 Blazor 并没有多少学习成本。如果你是 .NET 开发者,在学有余力的情况下,我强烈建议你花点时间学一学 Blazor

[1]. https://github.com/ant-design-blazor/ant-design-blazor

[2]. https://github.com/Element-Blazor/Element-Blazor

[3]. https://gitee.com/LongbowEnterprise/BootstrapBlazor

[4]. https://github.com/AdrienTorris/awesome-blazor

[5]. https://github.com/dotnet/aspnetcore/issues/27217

再聊 Blazor,它是否值得你花时间学习的更多相关文章

  1. Haskell语言为什么值得你去学习

    摘自http://www.vaikan.com/why-haskell-is-worth-learning/ Haskell语言为什么值得你去学习 当我向一些新手推荐学习Haskell语言时,得到的反 ...

  2. Elasticsearch从入门到放弃:再聊搜索

    在前文中我们曾经聊过搜索文档的方法,Elasticsearch 一般适用于读多写少的场景,因此我们需要更多的关注读操作. Elasticsearch 提供的 Search API 可以分为 URI S ...

  3. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的eFUSE. 在i.MXRT启动系列第二篇文章 Boot配置(BOOT Pin, eFUSE) 里痞子 ...

  4. 再聊语言,模式,OOD

    今天与人再次聊到这个话题,有人在为"到底该用什么模式"而烦恼,我相信,每个都经历过这个阶段一定都会感觉很熟悉这个烦恼我认为, 模式不是目的,只是工具,达到设计目标的工具,我们不会因 ...

  5. 再聊我们自研的那些Devops工具

    两年前我写了篇文章『我们自研的那些Devops工具』介绍了我们自研的一些DevOps工具系统,两年过去了这些工具究竟还有没有在发光发热,又有哪些新的变化呢,我将通过这篇文章来回顾一下这两年的发展与变化 ...

  6. 值得Python小白学习的书 简单推荐几本吧

    于我个人而言,我很喜欢Python,当然我也有很多的理由推荐你去学python.我只说两点.一是简单,二是写python薪资高.我觉得这俩理由就够了,对不对.买本书,装上pycharm,把书上面的例子 ...

  7. 再谈布局,栅栏式自适应布局的学习和实现(calc自适应布局)

    布局真的很重要.一个不好的布局后期会有很多很多的bug,就像是建房子的地基一样. 首先,再一次地圣杯布局的学习,来源于该教程: http://www.jianshu.com/p/f9bcddb0e8b ...

  8. Linux好学吗?怎么自学Linux?6个值得你去学习Linux的理由!

    两个多月前,我对日常工作做出了一个非常重要的决定-我决定从Windows切换到Linux,将其作为个人和办公笔记本电脑的主要系统.除了开始时一些小的驱动程序问题之外,切换非常平稳,我不会考虑返回.如果 ...

  9. 值得H5前端学习的60个JS插件(含DEMO演示)

    下面也可以说是H5前端学习的js插件大全.基本包含了大部分的前端最前沿的js插件和库. 布局 SuperEmbed.js- 是一个Javascript库,可检测出网页上的内嵌视频并使他们能够变成响应式 ...

随机推荐

  1. 如何从0到1的构建一款Java数据生成器-第二章

    前提 在上一章我们提到了并且解决了几只拦路虎,承上启下,下面我们一起来实现一款数据生成器. 对外API /** * @description: 本地数据生成API * @author: peter * ...

  2. Thumbnailator处理图片

    读取源图 of(String... files) of(File... files) of(InputStream... inputStreams) of(URL... urls) 输出文件 toFi ...

  3. Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!

    GitHub 17k Star 的Java工程师成神之路,不来了解一下吗! GitHub 17k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 17k Star 的Java工 ...

  4. Business Partner - 供应商与客户的集成 - S/4HANA(1)

    本文基于S/4HANA 1511版本,同时大部分内容适用于S/4HANA i.e1610/1709/1809. 本文旨在为全新实施的BP配置,或从ECC到S/4HANA的供应商客户主数据迁移提供信息支 ...

  5. buuctf-misc-[BJDCTF 2nd]圣火昭昭-y1ng 1

    开局一张图片,flag全靠猜,那这个是不是和outguess工具有关呢?于是我们显示查看了图片的详细信息 看到是新佛曰,于是我们用新佛曰论禅解密:http://hi.pcmoe.net/buddha. ...

  6. vue实现循环滚动列表vue-seamless-scroll

    1.安装 vue-seamless-scroll   实例文档链接 cnpm install vue-seamless-scroll --save 2.文件中引入,组件配置 import vueSea ...

  7. vue知识点11

    1. Vue.js 是什么       Vue是一套用于构建用户界面的渐进式框架 2. vue的环境搭建(Vue2 ) 3. 经典的hello world         new Vue({      ...

  8. openresty下安装luarocks

    wget https://luarocks.org/releases/luarocks-2.4.1.tar.gz tar -xzvf luarocks-2.4.1.tar.gz cd luarocks ...

  9. Qlik Sense插件及QRS接口补充

    date: 2019-10-18 09:10:00 updated: 2019-10-18 15:18:00 Qlik Sense插件及QRS接口补充 1.插件 1.1 获取数据方式 理论上 Engi ...

  10. MFiX-DEM中的串行碰撞搜索

    在计算颗粒碰撞的时候,需要进行neighbor颗粒的搜寻,只知道大概是基于网格与颗粒绑定的方式,但是具体的实现方式还是比较模糊.搜寻部分代码如下 (mfix-19.2.2): 可以直接观察到的是,这里 ...