前言 本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。 是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇: 小公司,人員不多,利潤不高,創業階段能省則省 個人開發者,接 ...
前言
本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。
是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇:
- 小公司,人員不多,利潤不高,創業階段能省則省
- 個人開發者,接接私活,要麼一個人全棧,累點;要麼弄個小團隊,各自分錢少點;
- 不確定項目能做到啥程度,希望快速上線看效果,效果好繼續,效果不好拉倒
- 厭煩寫js,又不得不做bs界面
諸如此類,不分離開發更簡單,更省成本。
漸進式
vue是漸進式web前端框架,所謂的漸進式就是你不用一開始就整個項目全部使用vue,因為開始你可能並不熟悉vue,而是開始只使用vue的些簡單功能,慢慢用它更複雜更好的功能,最終項目可能完全使用vue。
漸進式blazor不是官方名詞,我隨便喊的,它的意思是你不必一開始就使用前後端分離模式,而是用不分離模式簡單的、快速開發、快速交付,後期如果用戶量大了,你可以把一個或幾個頁面或組件變成分離模式,逐漸的變,最終可能把整個項目變成分離模式。俗話說:你可能還在畫原型,而我的產品就是原型。
blazor是使用c#代替js寫前端的web框架,它有如下幾種渲染模式:
- 靜態渲染:也稱ssr,類似jsp、php、asp,由後端渲染靜態html,所以你可以拿blazor來做普通網站,
- 服務端渲染:也稱server模式,它還是在服務端執行代碼,服務端和瀏覽器會建立一個websocket長連接,前端做了啥操作,消息發到伺服器,伺服器處理後計算需要改變的ui部分,推送給前端。
- 客戶端渲染:也稱assembly模式,首次訪問時,下載dll到瀏覽器,可以aot發佈為原生的webassembly運行,也可以在瀏覽器的webassembly中跑個小型.net運行時,在它之上跑我們的應用,所以可以理解它是純前端
- auto模式:也稱為同構渲染,首次訪問以server模式運行,快速響應,且用戶可以做任何操作;後臺默默下載dll和運行時,之後自動切換為客戶端模式,js中有類似的next.js nuxt.js。
.net8以前我們要麼選擇server模式,要麼選擇webassembly模式,只能二選難一,前者由於所有代碼都在服務端,所以比較耗費伺服器資源,但開發簡單;後者是標準的前後端分離,不浪費伺服器資源,但相對開發麻煩些。
.net8發佈後,以前的mvc razorpage blazor server blazo webassembly都可以不用了,只需要創建blazor web app,至於使用哪種模式可以根據需要設置。blazor的組件開發模式類似:vue組件、winform/webform的用戶控制項或自定義控制項,更詳細的請參考官方文檔。
來了個單,按照慣例使用前後端分離方式
當然你可以使用其它方案,比如典型的:java提供api + vue前端,下圖是blazor前後端分離方式,webapi提供介面 + blazor做前端,本質都一樣
又來個單,為了簡單,用不分離
你可以用php jsp asp等類似的方式,下圖是blazor server方式,這個不太一樣,blazor server是基於websocket實現交互的組件化開發方式。但總的來說是不分離方式。
用戶量多了,不分離模式扛不住,漸進式分離
blazor的auto模式就是類似的模式。用戶量大了原來的服務端渲染記憶體 cpu 都有巨大壓力,那我們需要大重構成分離模式嗎?no no no,你可以先把某個複雜的、訪問頻繁的、計算量大的、占用記憶體高的組件設置為auto模式,這樣它最終會運行在客戶端,就成了分離模式,又多了段時間,用戶量更多了,你就繼續改一部分組件,如此這般,用戶越來越多,作為分離模式運行的組件越來越多,最終項目可能就變成純純的分離模式了。
反過來說,項目用了一段時間,沒啥用戶,項目死了,起碼你前期投入並不多,不必太桑心。