在我們團(tuán)隊(duì)的開發(fā)歷程中,C# 和 .NET 框架一直是我們的主力語言,伴隨我們走過了無數(shù)個(gè)項(xiàng)目。當(dāng)微軟推出 Blazor 這一革命性的框架時(shí),我們對(duì)其充滿了期待。Blazor 以其優(yōu)良的架構(gòu)和微軟的強(qiáng)大背書,似乎預(yù)示著前端開發(fā)的新紀(jì)元。我們希望借助 Blazor 的優(yōu)勢(shì),快速構(gòu)建與后臺(tái)服務(wù)配套的前端應(yīng)用。然而,隨著開發(fā)的深入,我們發(fā)現(xiàn)這條路并不如預(yù)期順利,最終不得不放棄 Blazor,轉(zhuǎn)而使用其他 Web 技術(shù)。本文將分享我們的經(jīng)歷,希望能為其他團(tuán)隊(duì)提供參考。
1. 初識(shí) Blazor 全棧 UI:滿懷期待
Blazor 的出現(xiàn),讓我們看到了使用 C# 進(jìn)行前端開發(fā)的可能性。對(duì)于習(xí)慣了 .NET 環(huán)境的開發(fā)者來說,這無疑是個(gè)好消息。我們可以在不切換語言的情況下,編寫前端代碼,提升了開發(fā)效率和代碼一致性。
Blazor 全棧 UI 的技術(shù)架構(gòu)優(yōu)勢(shì)明顯:
統(tǒng)一的開發(fā)體驗(yàn):開發(fā)者可以使用相同的 C# 代碼和 Razor 組件在 Blazor Server 和 Blazor WebAssembly 之間進(jìn)行無縫切換,簡(jiǎn)化了多種應(yīng)用類型的開發(fā)流程。
靈活的應(yīng)用架構(gòu):Blazor Web App 可以根據(jù)具體需求靈活選擇 Blazor Server 或 Blazor WebAssembly。
Blazor Server 通過 SignalR 技術(shù)提供服務(wù)端和客戶端的實(shí)時(shí)數(shù)據(jù)傳輸,和較快的初始加載時(shí)間。
而 Blazor WebAssembly 可以在瀏覽器中高效運(yùn)行,允許用戶離線使用,減少服務(wù)器負(fù)擔(dān),提高用戶的交互體驗(yàn)。
支持靈活地選擇 Server 還是 WASM 進(jìn)行渲染,可以針對(duì)整個(gè)應(yīng)用程序、某個(gè)頁面或控件設(shè)置渲染模式。
可以將 Server 搭建為 Backend-for-Frontend,寫后臺(tái)接口訪問數(shù)據(jù)庫(kù)。WASM 搭建為 Frontend,編寫布局和頁面。達(dá)到前后端分離,前端的頁面元素渲染和交互不再依賴后端,只有調(diào)用 API 獲取數(shù)據(jù)需要后端。
增強(qiáng)的性能:.NET 8 中的 Blazor 具有更好的性能優(yōu)化,包括更快的組件渲染和數(shù)據(jù)傳輸,提升了用戶體驗(yàn)。通過加強(qiáng)導(dǎo)航(Enhanced Navigation)功能,使用戶在交互和導(dǎo)航時(shí)感覺在瀏覽 SPA 網(wǎng)站。
利用渲染樹構(gòu)建組件:提供了 ChildContent、ChildFragment 來靈活地自定義控件元素的樣式和行為,支持通過模板重寫控件內(nèi)部的元素。
用戶身份和權(quán)限認(rèn)證:利用 Identity 無縫便捷地集成用戶驗(yàn)證和權(quán)限控制,支持對(duì)某個(gè)頁面、控件、Controller,API 設(shè)置訪問權(quán)限。WASM 應(yīng)用緩存了屬于客戶端的數(shù)據(jù),無需在服務(wù)端維護(hù),例如用戶身份信息、登錄狀態(tài)等等。
熟悉的開發(fā)工具:Visual Studio 和其他 IDE 對(duì) Blazor Web App 的友好支持,提供更好的調(diào)試體驗(yàn)和開發(fā)效率。
2. 遭遇挑戰(zhàn):理想與現(xiàn)實(shí)的差距
然而,理想很豐滿,現(xiàn)實(shí)卻很骨感。在項(xiàng)目推進(jìn)過程中,我們逐漸感受到 Blazor 的局限性。以下是我們遇到的一些主要問題:
UI 組件庫(kù)有限:相比于 React、Vue 等成熟框架,雖然 Blazor 社區(qū)在不斷發(fā)展,但現(xiàn)有的 UI 組件庫(kù)仍然相對(duì)較少。并且,面對(duì)某些復(fù)雜的前端效果,我們發(fā)現(xiàn) Blazor 難以將不同組件庫(kù)中的組件融合在一起使用,庫(kù)之間很難做到樣式和操作的統(tǒng)一,這嚴(yán)重影響了我們的開發(fā)效率。
前端效果難以實(shí)現(xiàn):Blazor 在處理某些前端效果時(shí)顯得力不從心。由于其運(yùn)行機(jī)制的特殊性,一些在其他框架中輕松實(shí)現(xiàn)的動(dòng)畫、交互效果,在 Blazor 中卻需要繞過各種限制,利用 JS 互操作來完成。這不僅降低了開發(fā)效率,也影響了用戶體驗(yàn)。
社區(qū)支持不足:一個(gè)框架的生態(tài)環(huán)境對(duì)于其發(fā)展至關(guān)重要。我們發(fā)現(xiàn),當(dāng)遇到問題時(shí),幾乎無法在社區(qū)中找到解決方案。一些無法通過官方文檔解決的疑問,StackOverflow 或 GitHub 上的相關(guān)帖子寥寥無幾。這使得我們?cè)谂挪楹徒鉀Q問題時(shí)陷入困境。
3. 展望未來:Blazor 的前景并不明朗
缺乏實(shí)際應(yīng)用案例:盡管 Blazor 在技術(shù)上有許多優(yōu)點(diǎn)并受到微軟的支持,但目前為止,使用 Blazor 搭建網(wǎng)站的知名企業(yè)、公司或組織仍然相對(duì)稀少。這使得潛在用戶對(duì)其穩(wěn)定性和長(zhǎng)期可維護(hù)性產(chǎn)生疑慮。
微軟的轉(zhuǎn)向:更讓人擔(dān)憂的是,微軟似乎不再為 Blazor 投入足夠的資源。近年來,微軟的重心逐漸轉(zhuǎn)移到人工智能(AI)領(lǐng)域,對(duì) Blazor 的更新和支持力度明顯下降。這讓 Blazor 的未來充滿了不確定性。
4. 做出抉擇:從 Blazor 回到 Vue
經(jīng)過一段時(shí)間的開發(fā),我們團(tuán)隊(duì)意識(shí)到,Blazor 可能并不適合我們未來的產(chǎn)品路線。盡管我們喜歡用 C# 開發(fā),但在 Web 開發(fā)領(lǐng)域,其他技術(shù)棧在組件豐富性、社區(qū)支持和生態(tài)系統(tǒng)上顯然更具優(yōu)勢(shì)。
綜合以上因素,我們不得不做出艱難的決定:
停止在新產(chǎn)品中使用 Blazor:為了項(xiàng)目的長(zhǎng)期發(fā)展,我們決定在下一個(gè)產(chǎn)品中放棄使用 Blazor。
重構(gòu)現(xiàn)有產(chǎn)品的前端部分:對(duì)于已經(jīng)使用 Blazor 的產(chǎn)品,我們計(jì)劃在第二個(gè)版本中重構(gòu)前端,改用更成熟的 Web 技術(shù),如 Vue。
這一決策雖然艱難,但也是我們經(jīng)過深思熟慮后的選擇。
5. 反思與建議:Blazor 的適用場(chǎng)景
通過這次經(jīng)歷,我們發(fā)現(xiàn)選用 Blazor 可以從以下幾點(diǎn)因素去考量:
團(tuán)隊(duì)規(guī)模:Blazor 更適合單兵作戰(zhàn)的開發(fā)者,或 2 至 4 人的小團(tuán)隊(duì)。這些開發(fā)者通常具有較強(qiáng)的 C# 和 .NET 背景,能夠快速上手,學(xué)習(xí) Blazor 的負(fù)擔(dān)相對(duì)其他非 .NET 背景的開發(fā)者要小很多,可以利用現(xiàn)有的 .NET 技能快速構(gòu)建和部署小型項(xiàng)目。
應(yīng)用類型:Blazor 非常適合用于構(gòu)建功能相對(duì)簡(jiǎn)單的標(biāo)準(zhǔn)管理系統(tǒng),比如內(nèi)部管理工具,進(jìn)行數(shù)據(jù)錄入、生成報(bào)告、利用儀表盤和報(bào)表進(jìn)行數(shù)據(jù)展示。這些應(yīng)用通常不需要復(fù)雜的前端交互,且需求相對(duì)穩(wěn)定,可以利用 Blazor 的組件化特性快速搭建。
產(chǎn)品演化:Blazor 更適合那些在開發(fā)初期對(duì)功能和用戶界面需求有明確設(shè)定的產(chǎn)品。這種情況下,可以在產(chǎn)品發(fā)布后無需過多的擔(dān)心產(chǎn)品后期的接手和維護(hù)問題。減少產(chǎn)品變更和迭代所帶來的維護(hù)成本。
6. 結(jié)語
在這個(gè)快速發(fā)展的技術(shù)世界里,選擇一個(gè)合適的開發(fā)框架至關(guān)重要。Blazor 的理念值得肯定,但在當(dāng)前階段,可能還不適合用于大型商業(yè)項(xiàng)目。我們的經(jīng)驗(yàn)教訓(xùn)也提醒著其他團(tuán)隊(duì),在技術(shù)選擇上要更加謹(jǐn)慎和前瞻。
未來,我們?nèi)詴?huì)關(guān)注 Blazor 的發(fā)展,但在那之前,我們將選擇更適合當(dāng)前需求的技術(shù)方案。盡管我們與 Blazor 的旅程暫告一段落,但這段經(jīng)歷將成為我們繼續(xù)探索和學(xué)習(xí)的寶貴財(cái)富。
Disclaimer 聲明:本文由 AI 輔助完成撰寫
TXRock
出處:cnblogs.com/txrock/p/18517222
該文章在 2025/6/11 16:29:32 編輯過