Fork me on GitHub

別了,JavaScript;你好,Blazor


Web開發與JavaScript開發向來是同義詞。直到WebAssembly的橫空出世,WebAssembly (Wasm)是一種在瀏覽器中可以執行的二進制指令。 WebAssembly 的 官方工具鏈 能夠編譯 C/C++ 代碼,但許多社區也提供了不同語言的編譯器,如 Rust,Python,JavaBlazor(C#)。特別是 Rust 社區非?;钴S,可以開始看到完整的前端框架,如 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是什么?

Blazor 允許您使用 C# 而不是 JavaScript 構建交互式 Web UI。

  • Blazor 應用由使用 C#、HTML 和 CSS 實現的可重用 Web UI 組件組成。
  • 客戶端和服務器代碼都用 C# 編寫,允許您共享代碼和庫。

在很長一段時間內,我們構建了僅在服務器上運行的應用程序,使用ASP.NET、PHP 等技術,在服務端生成了要推送到瀏覽器的 HTML 文件。我們始終與 JavaScript 和 AJAX 有一些交互性,但多年來,大多數業務邏輯都處理在服務器本身上,吐出 HTML 頁面進行交互,瀏覽器只是一個文檔查看器。

image

瀏覽器里很多年也是IE 當道,直到Chrome 這個瀏覽器的出現,IE 11之后微軟重新用Chrome的心臟置換了Microsoft Edge,慢慢的改變了我們前端開發的模式,進入了單頁面應用程序時代,這個時代的典型代表就是Angular,React和Vue。我們在瀏覽器里運行JavaScript構建的完整應用程序,見過大量的.NET程序員轉戰前端戰場。 我們拆分業務邏輯,做到前后端分離架構,以便某些邏輯在瀏覽器上運行,有些在服務器上運行。JavaScript 應用程序運行客戶端并使用消息傳遞與"服務器"通信。您可以輕松地將"服務器"替換為云中的服務或應用程序,但模型仍然相同。

image

Blazor 借助于WebAssembly技術 改進這種前后端分離的模式,他有兩種模式支持:Blazor WebAssembly 應用和Blazor Server ,個人認為Blazor Webassembly 模式的應用才是這種前后端分離的正途:

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、S3、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應用很好使,那沒問題?;谖覍eb開發多年的認知,我明白為什么會出現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,而且還在不斷學習。作為一個工程師,擁有這些技能就有了解決問題的思路。

posted @ 2020-05-04 11:23  張善友  閱讀(...)  評論(...編輯  收藏
全民捕鱼游戏怎么玩 新加坡5分彩骗局怎么骗 全球指数行情行情中心 河南快三注册 中国体育彩票开奖结果 炒股怎么炒视频教程 河北11选5任五遗漏查询 澳大利亚股票指数 彩票基本走势图周日 旺彩双色球18年版 北京pk拾精准八码预测