Blazor學習之旅(1)初步了解Blazor

37a1b5daf33b5143d5ac5870db338614.jpeg

【Blazor】|?總結/Edison Zhou


九月以來在學習Blazor做全棧開發,因此根據老習慣,我會將我的學習過程記錄下來,一來體系化整理,二來作為筆記供將來翻看。作為第一篇,我們先來了解一下這個Blazor到底是個什么鬼。

什么是Blazor?

Blazor是微軟近年來主推的,基于C#、HTML與CSS來構建交互式Web UI的框架。?

6dcb66f8a84cde8a46fd9db1977a3748.jpeg

借助 Blazor,開發人員可以使用 C# 生成客戶端和服務器代碼。他們還可以與前端客戶端代碼和后端邏輯共享代碼和庫。使用 C# 生成所有代碼可簡化在前端和后端之間共享數據,重復使用代碼以加速開發和維護。

Blazor的兩種模式

(1)Blazor Server模式

Blazor Server 是 Blazor 用戶界面框架(作為 ASP.NET Core Web 開發框架的一部分)的實現,并部署到 Web 服務器。使用 Blazor Server 開發應用程序會在 Web 服務器上生成 HTML,因為網站訪客通常使用 Web 瀏覽器來請求此內容。然后,該 HTML 會傳送到訪客的瀏覽器,并且系統將使用 ASP.NET Core SignalR 和首選 Web 套接字連接來維護雙向通信管道。

話外音:它需要下載的東西很小,可以使用所有服務器端的API,并且可以在不支持WebAssembly的瀏覽器中運行。但它不支持離線運行,網絡延遲的影響也較大。

單擊按鈕、導航以及與 Blazor Server 應用程序進行其他交互的用戶將通過此 SignalR 連接傳輸其操作,并且服務器將使用相同的連接來通過用戶界面更新進行響應。Blazor Server 框架使用 Web 服務器上生成的內容來自動更新瀏覽器。

d1274ee0a3bd72e42081ca584fdf50d5.png

(2)Blazor WebAssembly模式

首先,什么是WebAssembly?

WebAssembly (WASM) 是一種開放的二進制標準。它用于定義旨在 Web 瀏覽器中運行的程序的可移植代碼格式。

WebAssembly 是一種文本程序集語言,具有專用于實現快速下載和近乎本機性能的精簡二進制格式。

WebAssembly 為 C、C++、C# 和 Rust 等語言提供了編譯目標。它設計為與 JavaScript 一起運行,因此兩者可協同工作。WebAssembly 還可生成可下載和脫機運行的漸進式 Web 應用程序。

其次,什么是Blazor WebAssembly?

使用 Blazor WebAssembly,開發人員可以在瀏覽器中運行 .NET 代碼。

Blazor WebAssembly?是一種單頁應用框架,使用的是 WebAssembly 開放標準,無需安裝任何插件或代碼生成。

在瀏覽器中通過 WebAssembly 執行的 .NET 代碼在瀏覽器的 JavaScript 沙盒中運行。該代碼具有沙盒提供的所有安全和保護特性。這有助于防止客戶端計算機上的惡意操作。

7e3542fc7f3bad386c6aca8b38b01f85.png

Blazor 使用編譯為 WebAssembly 模塊的 .NET 運行時,該模塊隨應用一起下載。該模塊可執行 Blazor 應用中包含的 .NET Standard 代碼。

話外音:首次應用訪問時下載量比較大,影響性能,這可能是最大的缺點。但它支持離線運行。

Blazor WebAssembly 應用僅限于執行該應用的瀏覽器的功能,但該應用可以通過 JavaScript 互操作訪問完整的瀏覽器功能。

最后,需要注意的是,Blazor WebAssembly當前只支持以下瀏覽器:

  • Microsoft Edge

  • Google Chrome

  • Mozilla Firefox

  • Apple Safa

如何選擇Blazor兩種模式?

微軟在官方文檔中也給出了如何抉擇何時使用Blazor:

Blazor 是一種非常棒的用戶界面框架,適用于已熟悉 .NET 并且希望獲得用于設計和交付基于 HTML 的應用程序的各種選項的開發人員。綜合上述準則,決定在下一個應用程序中使用 Blazor WebAssembly 還是 Blazor Server 時,請考慮下表:

e3c062cd19d983c694021e5f82e1cc88.png

Blazor和主流前端框架如何選擇?

這里引用葉影大佬的文章,本節下文中的我均指代葉影。

說到Blazor,必然會有人拿它跟現有廣泛應用的前端三大JS框架(React/Vue/Angular)對比,我也闡述一下個人觀點。

首先,Blazor在框架設計上并沒有閉門造車。在使用Blazor的過程中,可以充分感受到Blazor和當前主流前端技術的聯系:

  • 組件式開發的范式,推薦以組件的形式作為頁面基本的UI元素

  • 在html模板中,部分C#關鍵詞充當了類似“指令”的角色。例如@if和ng-if, @for和vue-for等等

  • html/css/code(JS/C#)的分離和組合。Blazor里每個頁面既可以拆分成MyPage.razor(html模板文件),MyPage.razor.cs(C#代碼文件)和MyPage.razor.css(樣式文件)三部分,也可以將三者統一寫到MyPage.razor文件里。

  • 依賴注入。有過Angular開發經驗的開發者,應該會對此深有體會。

其次,Blazor保留了C#和JS之間的互操作性。也就是說,Blazor既理所當然地利用了.NET現有的生態,也兼容更加繁榮的JS生態。這樣開放的思路,給了Blazor開源社區非常大的發展空間,比如很多早先由原生JS編寫的圖表開源項目,可以以相對較低的成本遷移到Blazor上來;又比如可以使用Blazor封裝三大框架已有的組件,或者原生組件(播放器等)。

因此,Blazor和前端三大框架之間,的確有相當一部分的功能其實可以互相取代。然而Blazor的目的,不是為了取代三大框架;從現狀來看,甚至連競爭的地位都談不上。Blazor能吸引的最主要人群,是.NET開發者,它給了開發者完全以C#作為主要語言實現全棧開發的機會。尤其是,前后端可以共享包含數據類型和邏輯模塊的C#代碼,這一優勢只有C#全棧開發者才能深切體會到。例如,對于后端出身的C#開發者,在前后端分離的環境下,以往更偏愛設計模式上與后端更相近的Angular;如今Blazor已逐漸成熟,可以“橫刀奪愛”了。

如上所說,Blazor并不能讓三大框架的絕大多數JS開發者產生興趣,更無法與當下繁榮的JS生態競爭。另外,在IE及其他一些老舊版本的瀏覽器仍未被完全淘汰的當下,為了保證頁面的普適和兼容,Blazor自然不會被大部分人看重。但作為基于Web Assembly的前端框架,它依然還是特別的:WASM的普及和發展,一定會利及Blazor,使其在未來有更大的發展空間。這里舉一個即將實現的例子:由于WASM可以在非Web環境下運行,那么Blazor將來也可以用于開發運行在非Web環境下的UI程序,這在官方的計劃中已經提及——Blazor Web Assembly MAUI。

上文出處:https://zhuanlan.zhihu.com/p/386150142,作者:葉影。

小結

基于Blaozr的特點,我們認為它應當是.NET技術棧的發團隊開發企業級信息管理系統的首選框架,特別是對于傳統行業的數字化IT團隊

例如Edison所在的工業制造行業的IT團隊,受限于團隊規模和人員水平,不能像互聯網公司那樣搞純粹的大規模前后端獨立團隊,對性能的要求也不會有互聯網大促的要求那么高,此外最重要的是每個人的職責除了開發可能還兼顧運維和一定程度的需求梳理,因此利用已掌握的技術棧實現端到端的業務需求,將精力更多放到與業務的融合 和 微服務API邏輯的編寫 是更好的選擇

最后,我想說:對傳統行業的數字化轉型來說,只有適合的技術,沒有最好的技術

下一篇,就讓我們開始寫第一個Blazor應用程序吧!

參考資料

知乎問答,葉影,https://zhuanlan.zhihu.com/p/386150142

Microsoft Docs,《使用Blazor生成Web應用》

095baddca299a455065221697b675280.gif

年終總結:Edison的2021年終總結

數字化轉型:我在傳統企業做數字化轉型

C#刷題:C#刷劍指Offer算法題系列文章目錄

.NET面試:.NET開發面試知識體系

.NET大會:2020年中國.NET開發者大會PDF資料

e436db0ed2cf4ca1eef1c723de3b5f48.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

英國如何推動分享經濟的發展?

——基于英國“分享經濟全球中心”戰略的深度分析 蔡雄山 騰訊研究院法律研究中心首席研究員 徐 俊 騰訊研究院助理研究員 “分享經濟具有巨大的經濟潛力,我希望確保英國處于分享經濟的前沿與中心,并且成為能夠與舊金山相媲美的高科技初創企業的發源地…

C#合并文件夾圖片列表 自定義排版順序

本次程序編寫主要為了將pdf word等文檔轉換為圖片后設置不同的打印排版 前提 目標文件夾中的圖片高寬都是一致的 /// <summary>/// 合并圖片/// </summary>/// <param name"savedictory">文件保存目錄</param>/// <param name"singl…

硬盤基本知識(一)

總體來說&#xff0c;硬盤結構包括&#xff1a;盤片、磁頭、盤片主軸、控制電機、磁頭控制器、數據轉換器、接口、緩存等幾個部份。所有的盤片&#xff08;一般硬盤里有多個盤片&#xff0c;盤片之間平行&#xff09;都固定在一個主軸上。在每個盤片的存儲面上都有一個磁頭&…

MySQL - 存儲過程

一、概述 存儲過程可以理解為一段 SQL 語句的集合&#xff08;相當于 PHP 中的一個函數方法&#xff0c;去實現業務邏輯&#xff09;&#xff0c;它們被事先編譯好并且存儲在數據庫中。 調用存儲過程與直接執行 SQL 語句的效果是相同的&#xff0c;但是存儲過程的一個好處是處理…

白話聊應用架構

產業互聯網時代&#xff0c;數字化轉型&#xff08;數字化演化歷史&#xff09;已成為一種趨勢&#xff0c;各行各業都投入到數字化轉型的浪潮中來。節后有個客戶項目參與者問我架構方面的事情&#xff0c;我想來想去對于非IT人來說&#xff0c;可能應用架構是最容易理解&#…

python大數_python處理大數字的方法

本文實例講述了python處理大數字的方法。分享給大家供大家參考。具體實現方法如下&#xff1a;def getFactorial(n):"""returns the factorial of n"""if n 0:return 1else:k n * getFactorial(n-1)return kfor k in range(1, 70):print "…

數據庫分庫分表、讀寫分離的原理和實現,以及使用場景

2019獨角獸企業重金招聘Python工程師標準>>> 為什么要分庫分表和讀寫分離&#xff1f; 類似淘寶網這樣的網站&#xff0c;海量數據的存儲和訪問成為了系統設計的瓶頸問題&#xff0c;日益增長的業務數據&#xff0c;無疑對數據庫造成了相當大的負載&#xff0c;同時…

談談一些有趣的CSS題目(十六)-- 奇妙的 background-clip: text

開本系列&#xff0c;談談一些有趣的 CSS 題目&#xff0c;題目類型天馬行空&#xff0c;想到什么說什么&#xff0c;不僅為了拓寬一下解決問題的思路&#xff0c;更涉及一些容易忽視的 CSS 細節。 解題不考慮兼容性&#xff0c;題目天馬行空&#xff0c;想到什么說什么&#x…

第五周軟件工程作業-每周例行報告

一、PSP T名稱C內容ST開始時間ED結束時間中斷時間/min實際時間/minScrum會議第一次Scrum會議10月13日11:3010月13日12:10040第二次Scrum會議10月14日15:3010月14日15:55025第三次Scrum會議10月15日13:3010月15日14:05035第四次Scrum會議10月16日11:3010月16日13:00090第五次Scr…

MySQL - 觸發器

一、概述 Mysql 允許通過觸發器、存儲過程、函數的形式來存儲代碼。 觸發器可以讓你在執行 Insert、Update、Delete的時候&#xff0c;執行一些特定的操作。可以在Mysql中指定是在Sql語句執行之前觸發還是執行后觸發。 二、使用觸發器需要注意的點 對每一個表的每一個事件&a…

Docker Desktop 可以直接啟用Kubernetes 1.25 了

作為目前事實上的容器編排系統標準&#xff0c;K8s 無疑是現代云原生應用的基石&#xff0c;很多同學入門可能直接就被卡到第一關&#xff0c;從哪去弄個 K8s 的環境&#xff0c; Docker Desktop 自帶了Kubernetes 服務&#xff0c;但是在過往的經驗中就是用梯子也安裝不了&…

截取url的host_java正則表達式獲取url的host示例

java正則表達式獲取url的host示例 復制代碼 代碼如下: public static String getHost(String url){if(url==null||url.trim().equals("")){return ""; } String host = ""; Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+&qu…

MySQL - 視圖

一、概述 Mysql 5.0 版本后開始引入視圖。視圖本身是一個虛擬表&#xff0c;不存放任何數據。在使用 sql 語句訪問視圖的時候&#xff0c;他返回的數據都是在查詢過程中從其他表動態生成的。 二、使用視圖   1、創建視圖 CREATE VIEW comic_view as SELECT comic_id,name,pe…

Linux環境下壓縮與解壓命令大全

tar命令 解包&#xff1a;tar zxvf FileName.tar 打包&#xff1a;tar czvf FileName.tar DirName gz命令 解壓1&#xff1a;gunzip FileName.gz 解壓2&#xff1a;gzip -d FileName.gz 壓縮&#xff1a;gzip FileName .tar.gz 和 .tgz 解壓&#xff1a;tar zxvf FileName.tar.…

Centos 磁盤管理及配額管理

實驗內容&#xff1a;一.添加兩塊硬盤&#xff0c;使用LVM做成VG01組&#xff0c;在該VG中新建兩個LV。二.將這兩個LV格式化為ext4/xfs&#xff0c;開機自動掛載到系統mnt1,mnt2目錄下。三.lv02開啟磁盤配額功能&#xff0c;用來進行用戶與組分配額的實驗。四.在系統里添加用戶…

OnionArch - 采用DDD+CQRS+.Net 7.0實現的洋蔥架構

博主最近失業在家&#xff0c;找工作之余&#xff0c;看了一些關于洋蔥&#xff08;整潔&#xff09;架構的資料和項目&#xff0c;有感而發&#xff0c;自己動手寫了個洋蔥架構解決方案&#xff0c;起名叫OnionArch。基于最新的.Net 7.0 RC1, 數據庫采用PostgreSQL, 目前實現了…

spark寫出分布式的訓練算法_利用 Spark 和 scikit-learn 將你的模型訓練加快 100 倍...

在 Ibotta&#xff0c;我們訓練了許多機器學習模型。這些模型為我們的推薦系統、搜索引擎、定價優化引擎、數據質量等提供動力。它們在與我們的移動應用程序交互時為數百萬用戶做出預測。當我們使用 Spark 進行數據處理時&#xff0c;我們首選的機器學習框架是 scikit-learn。隨…

理解LinkedHashMap

1. LinkedHashMap概述&#xff1a;LinkedHashMap是HashMap的一個子類&#xff0c;它保留插入的順序&#xff0c;如果需要輸出的順序和輸入時的相同&#xff0c;那么就選用LinkedHashMap。LinkedHashMap是Map接口的哈希表和鏈接列表實現&#xff0c;具有可預知的迭代順序。此實現…

MySQL - 鎖

一、什么是鎖 鎖是數據庫系統區別于文件系統的一個關鍵特性。鎖機制用于管理對共享資源的并發訪問。 二、MySQL 不同存儲引擎支持的鎖機制 存儲引擎支持的鎖類型Myisam表鎖Innodb行鎖、表鎖Memory表鎖BDB頁鎖、表鎖表鎖&#xff1a;直接鎖住的是一個表&#xff0c;開銷小&…

數據庫時區那些事兒 - MySQL的時區處理

原文地址 當JVM時區和數據庫時區不一致的時候&#xff0c;會發生什么&#xff1f;這個問題也許你從來沒有注意過&#xff0c;但是當把Java程序容器化的時候&#xff0c;問題就浮現出來了&#xff0c;因為目前幾乎所有的Docker Image的時區都是UTC。本文探究了MySQL及其JDBC驅動…