面试官:你刚说你喜欢研究新技术,那么请说说你对 Blazor 的了解
阅读本文大概需要 1.5 分钟。
最近在几个微信 .NET 交流群里大家讨论比较频繁的话题就是这几天自己的面试经历。
面试官:“你刚说你喜欢研究新技术,那么你对 Blazor 了解多少?”。
作为一位专注于 .NET 开发的软件工程师,你好意思说你对 Blazor 一点也不解吗?.NET 新技术也就是那么几个,连微软最近在逛推的 Blazor 你都不了解,你好意思说你喜欢研究新技术?
讲真,确实有很多童鞋对 Blazor 还不了解,平时埋头写代码改 Bug,哪有时间去研究 Blazor,再说这种玩意儿公司会不会采用还是个很大疑问呢。是这个理,但如果等你的公司(国内使用了.NET 技术的公司)都开始使用 Blazor 了,Blazor 还能算是新技术吗?出于真正对技术的兴趣和热爱,对于新技术,有人会主动地去了解(不一定要研究得很深),而不是等到需要用的时候再去了解。至少他们会知道新技术有哪些优点,在公司技术选型上就可以给到自己的意见甚至推广新技术的使用,这可能就是他们和普通程序员拉开差距的原因之一。
不管你是真对 Blazor 感兴趣,还是只是为了应付面试,作为 .NET 开发者,你没用过 Blazor,至少应该了解一下吧,哪怕是花个一两分钟看看这篇文章的介绍。
使用 C# 实现 Web 交互式 UI
Blazor 允许你使用 C# 来实现 Web 交互式 UI,而不需要使用 JavaScript。尽管 JavaScript 的生态很强大,但这种弱类型语言在业务逻辑比较复杂的大型 Web 开发上还是存在较大的缺陷。当然,经过几年的发展 JavaScript 的弱类型问题可以通过工程手段来解决,甚至使用 TypeScript 来替代,但在实现可重用组件上还是有诸多的不理想。
Blazor 应用可以使用 C#、HTML 和 CSS 实现可重用 Web UI 组件,客户端和服务器代码都用 C# 编写的,允许你共享代码和库。Blazor 是 ASP.NET Core 的一个新特性,所以可以很好的集成到 ASP.NET Core MVC/Razor Pages 应用中。
下面是一段来自于模板的 Blazor 代码:
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
在 WebAssembly 或服务器端运行
Blazor 支持两种运行方式,一是在客户端使用 WebAssembly 运行,二是在服务器端运行直接渲染到浏览器。
Blazor 可以使用 WebAssembly 直接在浏览器中运行客户端 C# 代码,正因为它是运行在 WebAssembly 上的 .NET 程序,所以客户端也可以重用服务器端的代码和库。
即使不使用 WebAssembly,Blazor 也可以在服务器端运行客户端的业务逻辑。客户端 UI 事件使用实时消息框架 SignalR 发送回服务器,一旦执行完成,所需的 UI 更改将发送到客户端渲染到 DOM 中。
目前主流开发单页应用(SPA)使用 Vue 或 React 的很多,但要实现服务器端渲染(SSR),还是挺麻烦的,尽管有现成的像 Next.js 或 Nuxt.js 这样的框架可以使用,但由于它们更新迭代比较快,依赖的 npm 包多而杂,后期维护和升级成本也很高。所以从 SSR 支持这一点来讲,Blazor 应用还是有明显优势的。
基于开放的 Web 标准
通常是为了使用统一的编程语言或使用统一的标准,常见的做法是将一种编程语言编写的代码转换为另一种编程语言,比如将 TypeScript 编写代码转换成 JavaScript 以便在浏览器中运行。而 Blazor 使用的是开放的 Web 标准,不需要额外的插件或代码语言转换。Blazor 可以在所有主流的 Web 浏览器中工作,包括移动端浏览器。
在客户端运行 Blazor 代码和 JavaScript 框架一样是在安全的沙箱中执行的,在基于开放的 Web 标准基础上,Blazor 具有服务器端代码的灵活性,比如直接连接数据库。
和 JavaScript 交互
在 Blazor 应用中,你可以在 C# 代码中调用 JavaScript 代码,也可以在 JavaScript 代码中调用 C# 代码,两者可以很容易实现交互操作。好处是,在使用 C# 编写业务代码时,你依然可以继续使用现有庞大的 JavaScript 库生态系统。当使用服务器端运行代码时,Blazor 会负责在客户端使用 JavaScript 无缝调用 C# 代码。
下面是一个 JavaScrit 调用 C# 的示例[2]。
先使用 JSInvokable 特性标注一个 C# 方法为允许 JavaScript 调用:
<button type="button" class="btn btn-primary"
onclick="exampleJsFunctions.returnArrayAsyncJs()">
Trigger .NET static method ReturnArrayAsync
</button>
@code {
[JSInvokable]
public static Task<int[]> ReturnArrayAsync()
{
return Task.FromResult(new int[] { 1, 2, 3 });
}
}
然后在 JavaScript 代码中调用 C# 代码:
window.exampleJsFunctions = {
...
returnArrayAsyncJs: function () {
DotNet.invokeMethodAsync('BlazorSample', 'ReturnArrayAsync')
.then(data => {
data.push(4);
console.log(data);
});
},
...
};
其它
对我来说 Blazor 最吸引的优点是前后端代码的共用以及组件的重用。通过 nuget 管理和引用共用组件和库不仅比 npm 包管理方便,而且体积也小很多。
Blazor 的生态也正逐步发展起来了,虽然还没有听说哪个大公司在用,但 Blazor 的理念是未来趋势,值得你花点时间了解和研究一下。
参考:
[1]. http://dwz.win/EU4
[2]. http://dwz.win/EU3
面试官:你刚说你喜欢研究新技术,那么请说说你对 Blazor 的了解的更多相关文章
- 当面试官问你GET和POST区别的时候,请这么回答.......
文章内容转载于微信公众号WebTechGarden 一.GET和POST的'普通'区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就 ...
- Java面试官最爱问的volatile关键字
在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用 ...
- 一线大厂面试官最喜欢问的15道Java多线程面试题
前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者 ...
- 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
原文:走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串 对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有 ...
- 基础面试,为什么面试官总喜欢问String?
关于 Java String,这是面试的基础,但是还有很多童鞋不能说清楚,所以本文将简单而又透彻的说明一下那个让你迷惑的 String 在 Java 中,我们有两种方式创建一个字符串 String x ...
- 深度分析:面试腾讯,阿里面试官都喜欢问的String源码,看完你学会了吗?
前言 最近花了两天时间,整理了一下String的源码.这个整理并不全面但是也涵盖了大部分Spring源码中的方法.后续如果有时间还会将剩余的未整理的方法更新到这篇文章中.方便以后的复习和面试使用.如果 ...
- 【长文】Google面试官分步解析自己泄漏前的面试题,超多干货和建议
本文翻译自Google工程师/面试官Alex Golec的文章:Google Interview Questions Deconstructed: The Knight's Dialer:翻译:实验楼 ...
- [Interview]读懂面试问题,在面试官面前变被动为主动
面试是供需双方心理的较量,作为求职者来说,了解对方问题的内涵,做到“明明白白他的心”,就能变被动为主动.因此,读懂面试问题,掌握面试考官的提问的目的,有准备.有针对性地回答,对提高应聘的成功率是有很大 ...
- 看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟.醍醐灌顶的感觉. 最初在有 ...
随机推荐
- PYTHON 黑帽子第二章总结
基于python3编写 import sys, socket, getopt, threading, argparse, subprocess # globals options listen = F ...
- 记录B端和C端产品的理解
C 为:Consumer.Client,我们每天都在接触C端产品,为消费者.个人用户或终端用户,比如:微信.头条.抖音.美团等等. B 为:Business,作为职场人士也会经常接触B端产品,通常为企 ...
- Java实现 LeetCode 692 前K个高频单词(map的应用)
692. 前K个高频单词 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: [&qu ...
- Java实现 蓝桥杯 历届试题 核桃的数量
历届试题 核桃的数量 时间限制:1.0s 内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的 ...
- java实现手机尾号评分
30年的改革开放,给中国带来了翻天覆地的变化.2011全年中国手机产量约为11.72亿部.手机已经成为百姓的基本日用品! 给手机选个好听又好记的号码可能是许多人的心愿.但号源有限,只能辅以有偿选号的方 ...
- iOS -实现UIView圆角显示的方法
添加一个UIView时,默认直角显示有时对于有强迫症的患者还真有点不舒服! eg: 怎么实现UIview的圆角显示呢? 首先包含一个头文件: #import <QuartzCore/Quartz ...
- 轻松解决Github连接缓慢、图裂问题
1 简介 gayhub(误)github作为全世界最大的开源代码库以及版本控制系统,是用来托管项目以及学习开源技术非常好的平台,是我心中最好的学习网站,我们公众号的众多技术文章对应的数据和代码也都一直 ...
- 02-Python基础1
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- kernel list 实践
list.h /******* 链表实现,来自内核 **************************************************/ /** * container_of - c ...
- Nlog打印日志到Influxdb数据库
1.安装和使用Influxdb 安装部分网上资料比较多,也讲的比较详细,请自行百度. 下面大概讲下InfluxDB的写入和读取数据的方法. 我使用了InfluxData.Net包. 工具->Nu ...