亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ASP.NET Core 9.0 中新增的MapStaticAssets() 中間件詳解

 更新時間:2024年12月03日 09:10:51   作者:萬雅虎  
文章介紹了ASP.NET Core 9.0新增的MapStaticAssets中間件,該中間件解決了UseStaticFiles存在的缺陷,如缺乏靜態(tài)資源傳輸壓縮、ETag低效緩存和缺乏指紋識別,它通過生成時間壓縮、基于內(nèi)容的ETags和指紋識別來提升性能,感興趣的朋友一起看看吧

前言

Core 9.0版本中新增的內(nèi)容不算多,除了內(nèi)置OpenAPI 外 應該就屬MapStaticAssets中間件最有價值了,最初MapStaticAssets主要是為了解決Blazor靜態(tài)資源加載緩慢而生的,當然只要是wwwroot下的任何靜態(tài)資產(chǎn)都是可以使用TA平替UseStaticFiles的,因此在了解了TA的優(yōu)勢后 建議升級到9.0的小伙伴都使用TA平替UseStaticFiles!

既有缺陷

通常,在我們既有的NETCore項目中,我們都是使用UseStaticFiles中間件來提供靜態(tài)資產(chǎn),不過TA存在以下的一些缺陷:

  • 缺乏靜態(tài)資源的傳輸壓縮 (當然,可以搭配壓縮中間件,或者容器壓縮(如IIS動態(tài)壓縮))
  • 使用ETag進行低效緩存(依賴于文件修改時間戳,因此內(nèi)容不變時間戳變更將會導致重新加載)
  • 缺乏指紋識別(瀏覽器可能會緩存和重復使用舊版本的資產(chǎn),從而導致應用更新后出現(xiàn)不一致,影響用戶體驗)

解決問題

MapStaticAssets旨在解決上述UseStaticFiles存在的一些缺陷:

  • 為應用中的所有資產(chǎn)生成時間壓縮:
  • 在開發(fā)期間 gzip,在發(fā)布期間 gzip + brotli
  • 所有資產(chǎn)都經(jīng)過壓縮,目標是將資產(chǎn)大小降到最低。
  • 基于內(nèi)容的 ETags:每個資源的 Etags 都是內(nèi)容的 SHA-256 哈希的 Base64 編碼字符串。 這可確保瀏覽器僅在文件內(nèi)容發(fā)生更改時重新下載文件。
  • 指紋識別資源,通過資源唯一標識,可以防止瀏覽器重復使用舊版本。當應用程序更新時,指紋會發(fā)生變化,從而確??蛻舳耸冀K收到最新的資產(chǎn)。

MapStaticAssets內(nèi)部的請求管道中TA做了下面這些事:

  • 設置 ETag 和 Last-Modified 標頭。
  • 設置緩存標頭。
  • 使用 Caching Middleware。
  • 如果可能,提供壓縮的靜態(tài)資產(chǎn)。

性能提升

下表顯示了默認的 Razor Pages 模板中 CSS 和 JS 文件的原始大小和壓縮大?。?/p>

文件原始壓縮%縮減
bootstrap.min.css16317.589.26%
jquery.js89.62868.75%
bootstrap.min.js78.52074.52%
總計331.165.580.20%

在使用Blazor開發(fā)業(yè)務系統(tǒng)時將節(jié)省大量傳輸寬帶,極大的提升加載速度

不可替部分

當然UseStaticFiles仍然有TA不可替代的部分,比如虛擬文件提供者(如,嵌入的資產(chǎn),其他磁盤路徑資源,或網(wǎng)絡資源等)

比如資源是嵌入到程序集的情況下你仍然必須使用:

var embeddedFileProvider = new EmbeddedFileProvider(typeof(ISetting).Assembly, "Biwen.Settings");
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = embeddedFileProvider,
    OnPrepareResponse = ctx =>
    {
        ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=3600");
    }
});

結(jié)論

強烈建議在可替換UseStaticFiles()的情況下使用MapStaticAssets()

到此這篇關(guān)于ASP.NET Core 9.0 中新增的MapStaticAssets() 中間件的文章就介紹到這了,更多相關(guān)ASP.NET Core 中間件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論