实用技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > ASP.NET > 实用技巧 > ASP.NET Core 中间件

ASP.NET Core 9.0 中新增的MapStaticAssets() 中间件详解

作者:万雅虎

文章介绍了ASP.NET Core 9.0新增的MapStaticAssets中间件,该中间件解决了UseStaticFiles存在的缺陷,如缺乏静态资源传输压缩、ETag低效缓存和缺乏指纹识别,它通过生成时间压缩、基于内容的ETags和指纹识别来提升性能,感兴趣的朋友一起看看吧

前言

Core 9.0版本中新增的内容不算多,除了内置OpenAPI 外 应该就属MapStaticAssets中间件最有价值了,最初MapStaticAssets主要是为了解决Blazor静态资源加载缓慢而生的,当然只要是wwwroot下的任何静态资产都是可以使用TA平替UseStaticFiles的,因此在了解了TA的优势后 建议升级到9.0的小伙伴都使用TA平替UseStaticFiles!

既有缺陷

通常,在我们既有的NETCore项目中,我们都是使用UseStaticFiles中间件来提供静态资产,不过TA存在以下的一些缺陷:

解决问题

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

MapStaticAssets内部的请求管道中TA做了下面这些事:

性能提升

下表显示了默认的 Razor Pages 模板中 CSS 和 JS 文件的原始大小和压缩大小:

文件原始压缩%缩减
bootstrap.min.css16317.589.26%
jquery.js89.62868.75%
bootstrap.min.js78.52074.52%
总计331.165.580.20%

在使用Blazor开发业务系统时将节省大量传输宽带,极大的提升加载速度

不可替部分

当然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 中间件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文