别了,JavaScript;你好,Blazor


Web开发与JavaScript开发向来是同义词。直到WebAssembly的横空出世,WebAssembly (Wasm)是一种在浏览器中能够执行的二进制指令。 WebAssembly 的 官方工具链 可以编译 C/C++ 代码,但许多社区也提供了不一样语言的编译器,如 RustPythonJavaBlazor(C#)。特别是 Rust 社区很是活跃,能够开始看到完整的前端框架,如 YewDodrio,这为基于浏览器的应用带来了更多新的可能性,只要测试一些使用 WebAssembly 构建的优秀应用,就可知道基于浏览器的近乎原生的应用如今已经成为现实,例如 SketchupMagnum
WebAssembly被设计为能够和JavaScript一块儿协同工做——经过使用WebAssembly的JavaScript API,你能够把WebAssembly模块加载到一个JavaScript应用中而且在二者之间共享功能。这容许你在同一个应用中利用WebAssembly的性能和威力以及JavaScript的表达力和灵活性,即便你可能并不知道如何编写WebAssembly代码。

2017年 微软开始尝试基于WebAssembly使用Mono运行时让.NET进入浏览器,Mono为.NET运行库(.dll)提供了基于WebAssembly运行的环境。运行在Mono之上的是Blazor,一个构建于.NET的单页Web应用开发框架,经过Mono的WebAssembly运行时在浏览器中运行。 通过了3年时间的开发,2020年5月19日在微软年度技术大会Build上正式发布,咱们来看一看Blazor将如何改变Web开发。前端

Blazor是什么?git

Blazor 容许您使用 C# 而不是 JavaScript 构建交互式 Web UI。程序员

  • Blazor 应用由使用 C#、HTML 和 CSS 实现的可重用 Web UI 组件组成。
  • 客户端和服务器代码都用 C# 编写,容许您共享代码和库。

在很长一段时间内,咱们构建了仅在服务器上运行的应用程序,使用ASP.NET、PHP 等技术,在服务端生成了要推送到浏览器的 HTML 文件。咱们始终与 JavaScript 和 AJAX 有一些交互性,但多年来,大多数业务逻辑都处理在服务器自己上,吐出 HTML 页面进行交互,浏览器只是一个文档查看器。github

image

浏览器里不少年也是IE 当道,直到Chrome 这个浏览器的出现,IE 11以后微软从新用Chrome的心脏置换了Microsoft Edge,慢慢的改变了咱们前端开发的模式,进入了单页面应用程序时代,这个时代的典型表明就是Angular,React和Vue。咱们在浏览器里运行JavaScript构建的完整应用程序,见过大量的.NET程序员转战前端战场。 咱们拆分业务逻辑,作到先后端分离架构,以便某些逻辑在浏览器上运行,有些在服务器上运行。JavaScript 应用程序运行客户端并使用消息传递与"服务器"通讯。您能够轻松地将"服务器"替换为云中的服务或应用程序,但模型仍然相同。web

image

Blazor 借助于WebAssembly技术 改进这种先后端分离的模式,他有两种模式支持:Blazor WebAssembly 应用和Blazor Server ,我的认为Blazor Webassembly 模式的应用才是这种先后端分离的正途:npm

image

浏览器充当应用程序的宿主。在 Blazor WebAssembly 应用程序中构建的文件将编译并发送到浏览器。而后,浏览器在浏览器的执行沙盒中运行您的 JavaScript、HTML 和 C#。它甚至运行 .NET 运行时的版本,这个运行时处理 JavaScript 互操做,并提供基本服务(如垃圾回收)和更高级别的功能(布局、路由和用户界面小部件等)。换句话说,blazor使用了一个驻留在另外一个虚拟机中的虚拟机,堪称《盗梦空间》级别的悖论,也是一种在浏览器中运行非 JavaScript 应用程序框架的巧妙方法。这意味着您能够在浏览器中执行对 .NET 的调用,而且它是浏览器中成熟的应用程序。它甚至能够脱机运行。后端

运行时使得blazor 和 WebAssembly 上运行的其余语言不同凡响,MonoCLR 编译为WebAssembly。任何.NET Standard 2.1的代码均可以在上面运行,这样就能够把.NET生态的大量库带到前端开发,其余的语言只实现了直接编译为WebAssembly,blazor当前利用WebAssembly 的一个独特创新。浏览器

为何这是很酷的:
  • 您能够在任何静态文件服务器上运行它(Nginx、ISS、Apache、S三、Heroku 等)
  • 它以WebAssembly 运行 JS,以接近本机的速度运行 C#。
  • 您可使用 C# 开发丰富的前端应用程序。
  • 后端的API服务能够是任何语言,好比Java,PHP,Python,go
  • 重用 .NET 组件
  • 使用 Microsoft 工具(Visual Studio和Visual Studio Code)和调试

这很是适合低延迟应用程序,如游戏。若是您不须要与服务器通讯,则无需与服务器通讯。您能够下载应用程序并在浏览器中脱机运行该应用程序。前端框架

一些缺点:
  • 首次须要下载 .NET 框架和其余运行时文件(一次)
  • 您仅限于浏览器的功能
  • 在本地下载的全部机密(凭据、API 密钥等)
  • 并不是兼容全部 .NET 框架组件

有这些缺点也正是Blazor Server应用程序模型能够弥补,能够拥有要.NET的所有功能和瘦客户端。服务器

.NET切入Web开发的一个特殊优点,就是有了能够替换npm和WebPack的工具。 做为一个多年的.NET程序员,我能够向NuGet(包管理程序)和MSBuild招手了。对我而言,这些工具问题少,更熟悉,且效率也高得多。尽管没有完美的事物,但我使用NuGet和MSBuild的体验一直是很好的。这里不要误解个人意思,不是npm和Webpack很差,但愿你们放弃它们,但反之也同样。npm和WebPack都是伟大的工具,还会存在至关长的时间。若是你的JavaScript工具用来建立Web应用很好使,那没问题。基于我对Web开发多年的认知,我明白为何会出现npm和WebPack,也对它们取得的成熟和将要作出的贡献表示赞扬,微软也是花了大价钱把npm的提供商收至麾下,微软确定不是傻子。 
Blazor让我很是震撼的是它使用起来很是简单。公平地说,我认可Blazor的生态还不够完善,大量的利用前端技术圈的成果的开源项目正在不断涌现。Blazor把简单易用的Razor(UI)与其余.NET核心概念组合起来:依赖注入、配置、路由。并且从Angular及React等流行JavaScript框架借用了最佳模式,同时利用了Razor模板,并提供了与其余.NET惯例的一致性。这些功能的组合支持史无前例的技能重用。
使用WebAssembly并不意味着能够抛弃JavaScript。 WebAssembly眼下还只能被JavaScript加载和编译。(没错,这有点乱。)虽然将来的计划让WebAssembly模块能够像ES6模块同样被浏览器加载,但JavaScript仍是启动WebAssembly必需的。JavaScript的必要性还不止于此。WebAssembly自身没法访问任何平台API,而要访问这些API,JavaScript也是必要的。开发者能够经过Blazor interop在 WebAssembly自身不足时把JavaScript做为后备,此外这个交互机制也是一个抽象层,不少使用C#的程序员都会用到,他们没必要担忧底层运行的仍是JavaScript。

是否是使用C#开发Web 让你激动, WebAssembly及ASP.NET Core的Blazor等框架就值得投入一些时间了呢?至少我学了那么多年.NET,如今终于能够用它来更快地作Web开发了,仍是很值得炫耀的,这也是我有动力写这篇文章的缘由。不只如此,我其实也很熟悉JavaScript,并且还在不断学习。做为一个工程师,拥有这些技能就有了解决问题的思路。

相关文章
相关标签/搜索