javascript
别了,JavaScript;你好,Blazor
2017年 微軟開始嘗試基于WebAssembly使用Mono運(yùn)行時讓.NET進(jìn)入瀏覽器,Mono為.NET運(yùn)行庫(.dll)提供了基于WebAssembly運(yùn)行的環(huán)境。運(yùn)行在Mono之上的是Blazor,一個構(gòu)建于.NET的單頁Web應(yīng)用開發(fā)框架,通過Mono的WebAssembly運(yùn)行時在瀏覽器中運(yùn)行。經(jīng)過了3年時間的開發(fā),2020年5月19日在微軟年度技術(shù)大會Build上正式發(fā)布,我們來看一看Blazor將如何改變Web開發(fā)。
Blazor是什么?
Blazor 允許您使用 C# 而不是 JavaScript 構(gòu)建交互式 Web UI。
Blazor 應(yīng)用由使用 C#、HTML 和 CSS 實(shí)現(xiàn)的可重用 Web UI 組件組成。
客戶端和服務(wù)器代碼都用 C# 編寫,允許您共享代碼和庫。
在很長一段時間內(nèi),我們構(gòu)建了僅在服務(wù)器上運(yùn)行的應(yīng)用程序,使用ASP.NET、PHP 等技術(shù),在服務(wù)端生成了要推送到瀏覽器的 HTML 文件。我們始終與 JavaScript 和 AJAX 有一些交互性,但多年來,大多數(shù)業(yè)務(wù)邏輯都處理在服務(wù)器本身上,吐出 HTML 頁面進(jìn)行交互,瀏覽器只是一個文檔查看器。
瀏覽器里很多年也是IE 當(dāng)?shù)?#xff0c;直到Chrome 這個瀏覽器的出現(xiàn),IE 11之后微軟重新用Chrome的心臟置換了Microsoft Edge,慢慢的改變了我們前端開發(fā)的模式,進(jìn)入了單頁面應(yīng)用程序時代,這個時代的典型代表就是Angular,React和Vue。我們在瀏覽器里運(yùn)行JavaScript構(gòu)建的完整應(yīng)用程序,見過大量的.NET程序員轉(zhuǎn)戰(zhàn)前端戰(zhàn)場。我們拆分業(yè)務(wù)邏輯,做到前后端分離架構(gòu),以便某些邏輯在瀏覽器上運(yùn)行,有些在服務(wù)器上運(yùn)行。JavaScript 應(yīng)用程序運(yùn)行客戶端并使用消息傳遞與"服務(wù)器"通信。您可以輕松地將"服務(wù)器"替換為云中的服務(wù)或應(yīng)用程序,但模型仍然相同。
Blazor 借助于WebAssembly技術(shù) 改進(jìn)這種前后端分離的模式,他有兩種模式支持:Blazor WebAssembly 應(yīng)用和Blazor Server ,個人認(rèn)為Blazor Webassembly 模式的應(yīng)用才是這種前后端分離的正途:
瀏覽器充當(dāng)應(yīng)用程序的宿主。在 Blazor WebAssembly 應(yīng)用程序中構(gòu)建的文件將編譯并發(fā)送到瀏覽器。然后,瀏覽器在瀏覽器的執(zhí)行沙盒中運(yùn)行您的 JavaScript、HTML 和 C#。它甚至運(yùn)行 .NET 運(yùn)行時的版本,這個運(yùn)行時處理 JavaScript 互操作,并提供基本服務(wù)(如垃圾回收)和更高級別的功能(布局、路由和用戶界面小部件等)。換句話說,blazor使用了一個駐留在另一個虛擬機(jī)中的虛擬機(jī),堪稱《盜夢空間》級別的悖論,也是一種在瀏覽器中運(yùn)行非 JavaScript 應(yīng)用程序框架的巧妙方法。這意味著您可以在瀏覽器中執(zhí)行對 .NET 的調(diào)用,并且它是瀏覽器中成熟的應(yīng)用程序。它甚至可以脫機(jī)運(yùn)行。
運(yùn)行時使得blazor 和 WebAssembly 上運(yùn)行的其他語言與眾不同,MonoCLR 編譯為WebAssembly。任何.NET Standard 2.1的代碼都可以在上面運(yùn)行,這樣就可以把.NET生態(tài)的大量庫帶到前端開發(fā),其他的語言只實(shí)現(xiàn)了直接編譯為WebAssembly,blazor當(dāng)前利用WebAssembly 的一個獨(dú)特創(chuàng)新。
為什么這是很酷的:
您可以在任何靜態(tài)文件服務(wù)器上運(yùn)行它(Nginx、ISS、Apache、S3、Heroku 等)
它以WebAssembly 運(yùn)行 JS,以接近本機(jī)的速度運(yùn)行 C#。
您可以使用 C# 開發(fā)豐富的前端應(yīng)用程序。
后端的API服務(wù)可以是任何語言,比如Java,PHP,Python,go
重用 .NET 組件
使用 Microsoft 工具(Visual Studio和Visual Studio Code)和調(diào)試
這非常適合低延遲應(yīng)用程序,如游戲。如果您不需要與服務(wù)器通信,則無需與服務(wù)器通信。您可以下載應(yīng)用程序并在瀏覽器中脫機(jī)運(yùn)行該應(yīng)用程序。
一些缺點(diǎn):
首次需要下載 .NET 框架和其他運(yùn)行時文件(一次)
您僅限于瀏覽器的功能
在本地下載的所有機(jī)密(憑據(jù)、API 密鑰等)
并非兼容所有 .NET 框架組件
有這些缺點(diǎn)也正是Blazor Server應(yīng)用程序模型可以彌補(bǔ),可以擁有要.NET的全部功能和瘦客戶端。
.NET切入Web開發(fā)的一個特殊優(yōu)勢,就是有了可以替換npm和WebPack的工具。作為一個多年的.NET程序員,我可以向NuGet(包管理程序)和MSBuild招手了。對我而言,這些工具問題少,更熟悉,且效率也高得多。盡管沒有完美的事物,但我使用NuGet和MSBuild的體驗(yàn)一直是很好的。這里不要誤解我的意思,不是npm和Webpack不好,希望大家放棄它們,但反之也一樣。npm和WebPack都是偉大的工具,還會存在相當(dāng)長的時間。如果你的JavaScript工具用來創(chuàng)建Web應(yīng)用很好使,那沒問題?;谖覍eb開發(fā)多年的認(rèn)知,我明白為什么會出現(xiàn)npm和WebPack,也對它們?nèi)〉玫某墒旌蛯⒁龀龅呢暙I(xiàn)表示贊賞,微軟也是花了大價錢把npm的提供商收至麾下,微軟肯定不是傻子。Blazor讓我非常震撼的是它使用起來非常簡單。公平地說,我承認(rèn)Blazor的生態(tài)還不夠完善,大量的利用前端技術(shù)圈的成果的開源項(xiàng)目正在不斷涌現(xiàn)。Blazor把簡單易用的Razor(UI)與其他.NET核心概念組合起來:依賴注入、配置、路由。而且從Angular及React等流行JavaScript框架借用了最佳模式,同時利用了Razor模板,并提供了與其他.NET慣例的一致性。這些功能的組合支持前所未有的技能重用。使用WebAssembly并不意味著可以拋棄JavaScript。WebAssembly眼下還只能被JavaScript加載和編譯。(沒錯,這有點(diǎn)亂。)雖然未來的計(jì)劃讓W(xué)ebAssembly模塊可以像ES6模塊一樣被瀏覽器加載,但JavaScript還是啟動WebAssembly必需的。JavaScript的必要性還不止于此。WebAssembly自身無法訪問任何平臺API,而要訪問這些API,JavaScript也是必要的。開發(fā)者可以通過Blazor interop在 WebAssembly自身不足時把JavaScript作為后備,此外這個交互機(jī)制也是一個抽象層,很多使用C#的程序員都會用到,他們不必?fù)?dān)心底層運(yùn)行的還是JavaScript。是不是使用C#開發(fā)Web 讓你激動, WebAssembly及ASP.NET Core的Blazor等框架就值得投入一些時間了呢?至少我學(xué)了那么多年.NET,現(xiàn)在終于可以用它來更快地做Web開發(fā)了,還是很值得炫耀的,這也是我有動力寫這篇文章的原因。不僅如此,我其實(shí)也很熟悉JavaScript,而且還在不斷學(xué)習(xí)。作為一個工程師,擁有這些技能就有了解決問題的思路。總結(jié)
以上是生活随笔為你收集整理的别了,JavaScript;你好,Blazor的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 慎用ToLower和ToUpper,小心
- 下一篇: 堪称艺术品级的应用开发框架,Abp有望超