日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hello Blazor:(7)WebAssembly、Server模式你选哪种?小孩子才做选择!我用混合模式...

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hello Blazor:(7)WebAssembly、Server模式你选哪种?小孩子才做选择!我用混合模式... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上次的文章中,我們介紹了“Blazor WebAssembly和Blazor Server的區別”。它們各有優缺點。

Blazor WebAssembly的優勢在于運行期間可以和服務器無交互,但是需要長時間下載資源,而Blazor Server則首次加載速度非常快,但是必須和服務器實時通訊。

如果,同一個網站,在網絡環境好的情況下使用Blazor WebAssembly模式加載,而在網絡環境差的情況下使用Blazor Server模式加載以加快啟動速度。

這樣,不就可以把2種模式的優點都利用上了嗎?!

實現

創建Blazor WebAssembly項目

新建Blazor WebAssembly項目WebApplication1,只是在新建窗口中選擇“ASP.NET Core托管”:

這樣服務端也有了!

生成的解決方案會包含3個項目:WebApplication1.Client、WebApplication1.Server、WebApplication1.Shared。

添加Blazor Server代碼

上次我們已經知道,Blazor Server項目和普通ASP.NET Core服務端項目沒有太大區別。

因此,我們只需和標準的Blazor Server項目比較了一下,把WebApplication1.Server項目的Startup.cs中缺少的代碼復制過來:

public?void?ConfigureServices(IServiceCollection?services) {...services.AddServerSideBlazor(); }public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env) {...app.UseEndpoints(endpoints?=>{...//endpoints.MapFallbackToFile("index.html");endpoints.MapBlazorHub();endpoints.MapFallbackToPage("/_Host");}); }

注意,需要把Blazor WebAssembly項目的入口映射代碼注釋起來。

添加_Host頁面

把標準的Blazor Server項目中的_Host.cshtml文件復制到WebApplication1.Server的Pages目錄下。

設置namespace:

@namespace?WebApplication1.Client

并將引用的css文件名改成WebApplication1.Client.styles.css:

<head><meta?charset="utf-8"?/><meta?name="viewport"?content="width=device-width,?initial-scale=1.0"?/><title>Blazor混合模式</title><base?href="~/"?/><link?rel="stylesheet"?href="css/bootstrap/bootstrap.min.css"?/><link?href="css/app.css"?rel="stylesheet"?/><link?href="WebApplication1.Client.styles.css"?rel="stylesheet"?/> </head>

看下效果

使用上次“判斷當前運行在WebAssembly模式還是Server模式”的方法,修改WebApplication1.Client項目的Index.razor:

@page?"/"@inject?IJSRuntime?JS@JS.GetType().ToString()

運行代碼,發現現在已經運行在Server模式下了:

切換模式

假設,網站應該默認使用WebAssembly模式,只有當用戶用手機訪問網站時,才需要使用Server模式。

我們可以通過檢查瀏覽器的USER-AGENT,判斷是否來源于手機瀏覽器實現。

但是,沒法在Startup.cs中處理這個判斷,那么只能在入口文件_Host.cshtml中想辦法。

首先,我們判斷是否是手機瀏覽器:

var?isMobile?=?false; string?u?=?Request.Headers["USER-AGENT"]; var?b?=?new?System.Text.RegularExpressions.Regex(@"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge?|maemo|midp|mmp|mobile.+firefox|netfront|opera?m(ob|in)i|palm(?os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows?ce|xda|xiino",?System.Text.RegularExpressions.RegexOptions.IgnoreCase?|?System.Text.RegularExpressions.RegexOptions.Multiline); var?v?=?new?System.Text.RegularExpressions.Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a?wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r?|s?)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1?u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(?i|ip)|hs\-c|ht(c(\-|?|_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(?|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(?|\/)|klon|kpt?|kwc\-|kyo(c|k)|le(no|xi)|lg(?g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|?|o|v)|zz)|mt(50|p1|v?)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v?)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|?)|webc|whit|wi(g?|nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-",?System.Text.RegularExpressions.RegexOptions.IgnoreCase?|?System.Text.RegularExpressions.RegexOptions.Multiline); if?((b.IsMatch(u)?||?v.IsMatch(u.Substring(0,?4)))) {isMobile = true; }

然后,我們把原來Blazor WebAssembly項目的入口文件index.html的代碼復制到_Host.cshtml,根據isMobile判斷是否加載:

...@if?(isMobile) {<component?type="typeof(App)"?render-mode="ServerPrerendered"?/> } else {<div?id="app">Loading...</div> }...@if?(isMobile) {<script?src="_framework/blazor.server.js"></script> } else {<script?src="_framework/blazor.webassembly.js"></script> }

再看下效果

運行,默認已經是Blazor WebAssembly模式了:

然后,打開瀏覽器的開發者工具,切換到手機模式,刷新頁面。

不錯,已經變成Blazor Server模式了:

結論

在本文中,我們實現了Blazor混合模式。你可以根據實際需求進行改造,那你的Blazor變得又快又好!

如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!

總結

以上是生活随笔為你收集整理的Hello Blazor:(7)WebAssembly、Server模式你选哪种?小孩子才做选择!我用混合模式...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。