欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 外 應(yīng)該就屬MapStaticAssets中間件最有價值了,最初MapStaticAssets主要是為了解決Blazor靜態(tài)資源加載緩慢而生的,當(dāng)然只要是wwwroot下的任何靜態(tài)資產(chǎn)都是可以使用TA平替UseStaticFiles的,因此在了解了TA的優(yōu)勢后 建議升級到9.0的小伙伴都使用TA平替UseStaticFiles!

既有缺陷

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

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

解決問題

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

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

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

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

性能提升

下表顯示了默認(rèn)的 Razor Pages 模板中 CSS 和 JS 文件的原始大小和壓縮大小:

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

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

不可替部分

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

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

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é)論

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

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

相關(guān)文章

最新評論