首页 > 编程语言 >ASP.NET Core 9.0 中新增的MapStaticAssets() 中间件

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

时间:2024-12-02 17:34:38浏览次数:3  
标签:MapStaticAssets Core UseStaticFiles 压缩 中间件 9.0 TA

前言

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

既有缺陷

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

  1. 缺乏静态资源的传输压缩 (当然,可以搭配压缩中间件,或者容器压缩(如IIS动态压缩))
  2. 使用ETag进行低效缓存(依赖于文件修改时间戳,因此内容不变时间戳变更将会导致重新加载)
  3. 缺乏指纹识别(浏览器可能会缓存和重复使用旧版本的资产,从而导致应用更新后出现不一致,影响用户体验)

解决问题

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

  1. 为应用中的所有资产生成时间压缩:
  • 在开发期间 gzip,在发布期间 gzip + brotli
  • 所有资产都经过压缩,目标是将资产大小降到最低。
  1. 基于内容的 ETags:每个资源的 Etags 都是内容的 SHA-256 哈希的 Base64 编码字符串。 这可确保浏览器仅在文件内容发生更改时重新下载文件。
  2. 指纹识别资源,通过资源唯一标识,可以防止浏览器重复使用旧版本。当应用程序更新时,指纹会发生变化,从而确保客户端始终收到最新的资产。

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

  1. 设置 ETag 和 Last-Modified 标头。
  2. 设置缓存标头。
  3. 使用 Caching Middleware。
  4. 如果可能,提供压缩的静态资产。

性能提升

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

文件 原始 压缩 %缩减
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开发业务系统时将节省大量传输宽带,极大的提升加载速度

不可替部分

当然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()

标签:MapStaticAssets,Core,UseStaticFiles,压缩,中间件,9.0,TA
From: https://www.cnblogs.com/vipwan/p/18582297

相关文章

  • 面对api-ms-win-core-console-l1-2-0.dll丢失怎么处理?dll找不到的解决方法
    api-ms-win-core-console-l1-2-0.dll是Windows操作系统中的一个动态链接库文件,它属于Microsoft的WindowsAPI集的一部分。这个DLL文件主要负责提供与控制台相关的功能支持。当用户尝试运行某些应用程序时遇到此文件丢失或损坏的错误提示,通常会导致程序无法正常启动。......
  • 基于.NetCore开发博客项目 StarBlog - (32) 第一期完结
    前言本文记录一下StarBlog项目的当前状态与接下来v2版本的开发规划。StarBlog项目从2022年开始至今已经2年多了,本来早就该给第一期做个小结的,但这种博客类型的项目,一旦稳定能用之后,我就没多大的动力去更新了......
  • 消息中间件面试题之RocketMQ
    为什么使用消息队列?解耦、异步、削峰消息队列有什么优点和缺点?优点:解耦、异步、削峰缺点:系统的可用性降低、系统的复杂性提高了、一致性问题。RabbitMQ上的一个queue中存放的message是否有数量限制?限制是多少默认情况下一般是无限制,因为限制取决于机器的内存,但是消息过多会......
  • 修整程序集需要 .NET Core 3.0 或更高版本。
    最近编译WinSW,提示:修整程序集需要.NETCore3.0或更高版本。百思不得解,最后原来我不知道“修整程序”,在csproj文件中这么一段<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFrameworks>net461;net6.0-windows</Tar......
  • .NET Core 异步(Async)底层原理浅谈58
    简介多线程与异步是两个完全不同的概念,常常有人混淆。异步异步适用于"IO密集型"的场景,它可以避免因为线程等待IO形成的线程饥饿,从而造成程序吞吐量的降低。其本质是:让线程的cpu片不再浪费在等待上,期间可以去干其它的事情。要注意的是:Async不能加速程序的执行,它只能做到不阻......
  • .NET Core 异步(Async)底层原理浅谈
    简介多线程与异步是两个完全不同的概念,常常有人混淆。异步异步适用于"IO密集型"的场景,它可以避免因为线程等待IO形成的线程饥饿,从而造成程序吞吐量的降低。其本质是:让线程的cpu片不再浪费在等待上,期间可以去干其它的事情。要注意的是:Async不能加速程序的执行,它只能做到不......
  • app.Environment.IsDevelopment、app.UseStaticFiles() 、在ASP.NET Core应用程序中,调
    在ASP.NETCore应用程序中,app.UseStaticFiles()是一个中间件方法,用于启用对静态文件的服务。这意味着当你的应用程序接收到对静态资源(如HTML文件、CSS文件、JavaScript文件、图片等)的请求时,UseStaticFiles中间件会处理这些请求并提供相应的文件。在ASP.NETCore应用程序中,app.E......
  • 支付宝小程序支付及支付后异步通知 C# NeCore3.1
    十年河东,十年河西,莫欺少年穷学无止境,精益求精1、支付异步通知usingAliyunHelper.AliPayHelper;usingAop.Api.Util;usingMicrosoft.AspNetCore.Authorization;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Logging;u......
  • 字节面试:聊聊 CAP 定理?哪些中间件是AP? 哪些是CP? 说说 为什么?
    本文原文链接文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完......
  • MATH1109 - CORE MATHEMATICS
    AUTUMNSEMESTER2024-2025MATH1109-COREMATHEMATICSPythonCourseworkDeadline:15:00,Wednesday27/11/2024RulesItisnotpermittedtousegenerativeartificialintelligence(AI)softwareforthiscoursework.Ensurethatyouhavereadandhaveunderstood......