之前写了一篇文章《快速了解 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. 实现base64的编码解码,深刻理解base64

    上代码 #include<stdio.h> #include<string.h> #include<stdlib.h> const char padding = ' ...

  2. OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...

  3. 【数论】HDU 4143 A Simple Problem

    题目内容 给出一个正整数\(n\),找到最小的正整数\(x\),使之能找到一个整数\(y\),满足\(y^2=n+x^2\). 输入格式 第一行是数据组数\(T\),每组数据有一个整数\(n\). 输 ...

  4. Windows环境下vscode Live Server插件如何开启https

    0x01 vscode http插件 Live Server如何开启https 在本机端的开发环境下,如果要测试一些需要HTTPS的功能可以使用mkcert给自己颁发凭证 0x02 安装步骤如下: 1 ...

  5. .net core迁移实践:项目文件csproj的转换

    随着net core的不断更新和生产可用,越来越多的人把现有的应用迁移和部署到net core平台.本文将分享迁移过程中的一个环节,给大家做一下参考. 背景说明 先来介绍一下什么是SDK样式的文件结构 ...

  6. HTML轮播(1)

    前言 要想实现轮播,我们就得先把最基础的功能实现,那就是滚动,实现了滚动后就可以继续扩展,完成更多想要的效果 CSS <style> #LB { width: 100%; height: ...

  7. Lombda表达式(五)

    public class Test05 { /* * lambda表达式是用来简化匿名内部类的一种函数式编程的语法. * 只有SAM接口才能使用lambda表达式 * 方法引用和构造器引用是用来简化l ...

  8. python fastApi实战项目 - 爱投票管理系统(一)

    一.闲来无事,在工作之余自己研究了一下python的异步框架 - fastapi,并写包括 1.部门管理 2.角色管理 3.用户管理 4.菜单管理 5.登录日志 6.操作日志 六个基础功能模块,演示链 ...

  9. Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection

    目录 Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Generalized Focal L ...

  10. altium designer使用小技巧,记录

    1.在自建库文件中添加component File--open----schlib或pcblib---Tools---new component---绘制---保存. 2.编辑component 左边 ...