ASP.NET Core 9.0 中新增的MapStaticAssets() 中間件詳解
前言
在Core 9.0版本中新增的內容不算多,除了內置OpenAPI 外 應該就屬MapStaticAssets中間件最有價值了,最初MapStaticAssets主要是為了解決Blazor靜態(tài)資源加載緩慢而生的,當然只要是wwwroot下的任何靜態(tài)資產都是可以使用TA平替UseStaticFiles的,因此在了解了TA的優(yōu)勢后 建議升級到9.0的小伙伴都使用TA平替UseStaticFiles!
既有缺陷
通常,在我們既有的NETCore項目中,我們都是使用UseStaticFiles中間件來提供靜態(tài)資產,不過TA存在以下的一些缺陷:
- 缺乏靜態(tài)資源的傳輸壓縮 (當然,可以搭配壓縮中間件,或者容器壓縮(如IIS動態(tài)壓縮))
- 使用ETag進行低效緩存(依賴于文件修改時間戳,因此內容不變時間戳變更將會導致重新加載)
- 缺乏指紋識別(瀏覽器可能會緩存和重復使用舊版本的資產,從而導致應用更新后出現不一致,影響用戶體驗)
解決問題
MapStaticAssets旨在解決上述UseStaticFiles存在的一些缺陷:
- 為應用中的所有資產生成時間壓縮:
- 在開發(fā)期間
gzip,在發(fā)布期間 gzip +brotli - 所有資產都經過壓縮,目標是將資產大小降到最低。
- 基于內容的 ETags:每個資源的 Etags 都是內容的
SHA-256哈希的 Base64 編碼字符串。 這可確保瀏覽器僅在文件內容發(fā)生更改時重新下載文件。 - 指紋識別資源,通過資源唯一標識,可以防止瀏覽器重復使用舊版本。當應用程序更新時,指紋會發(fā)生變化,從而確保客戶端始終收到最新的資產。
在MapStaticAssets內部的請求管道中TA做了下面這些事:
- 設置 ETag 和 Last-Modified 標頭。
- 設置緩存標頭。
- 使用 Caching Middleware。
- 如果可能,提供壓縮的靜態(tài)資產。
性能提升
下表顯示了默認的 Razor Pages 模板中 CSS 和 JS 文件的原始大小和壓縮大?。?/p>
| 文件 | 原始 | 壓縮 | %縮減 |
|---|---|---|---|
| bootstrap.min.css | 163 | 17.5 | 89.26% |
| jquery.js | 89.6 | 28 | 68.75% |
| bootstrap.min.js | 78.5 | 20 | 74.52% |
| 總計 | 331.1 | 65.5 | 80.20% |
在使用Blazor開發(fā)業(yè)務系統時將節(jié)省大量傳輸寬帶,極大的提升加載速度
不可替部分
當然UseStaticFiles仍然有TA不可替代的部分,比如虛擬文件提供者(如,嵌入的資產,其他磁盤路徑資源,或網絡資源等)
比如資源是嵌入到程序集的情況下你仍然必須使用:
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");
}
});結論
強烈建議在可替換UseStaticFiles()的情況下使用MapStaticAssets()
到此這篇關于ASP.NET Core 9.0 中新增的MapStaticAssets() 中間件的文章就介紹到這了,更多相關ASP.NET Core 中間件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

