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

news/2024/12/2 17:25:23/文章来源:https://www.cnblogs.com/vipwan/p/18582297

前言

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845520.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IC Compiler II(ICC II)后端设计流程——超详细

Preface 本文中英文结合(学习一些专有名词),主要介绍ICC II软件进行后端设计的主要流程,在阅读之前需要对数字IC设计流程有一定的了解。 逻辑综合相关知识请查看:Synopsys逻辑综合及DesignCompiler的使用(想了解逻辑综合的可以看看这个,但内容较多) 数字IC设计整体流程…

迁移工具简介

迁移工具能有序、安全、便捷、轻松地将数字资产、服务、IT 资源及应用程序部分或完全迁移到天翼云,同时保证云上业务的可用性、安全性以及连续性。支持 x86、 ARM 同构服务器间迁移,覆盖多种主流操作系统、支持信创适配。本文分享自天翼云开发者社区《迁移工具简介》,作者:…

智慧园区算法视频分析服务器如何确保视频监控系统在极端天气下也能稳定运行?

在面对极端天气条件时,确保智慧园区算法视频分析服务器的稳定运行对于维持关键监控系统的连续性和数据安全性至关重要。以下是一系列措施,旨在保障视频监控系统在诸如暴雨、高温、暴雪等恶劣天气条件下的可靠性和有效性。通过实施这些策略,我们可以最大程度地减少极端天气对…

Docker常用应用之稍后阅读

1.简介 wallabag是一款开源的,可以自托管的稍后阅读工具。提供了浏览器插件和手机客户端,可以很方便的收藏文章用于稍后再看。 wallabag官网,wallabag github地址,wallabag dockerhub 2.部署 2.1.docker部署 cd /docker_data/ mkdir -p wallabag/data cd wallabag vi docke…

css 边框镶角

效果图:background: linear-gradient(to left, yellow, yellow) left top no-repeat,linear-gradient(to bottom, yellow, yellow) left top no-repeat,linear-gradient(to left, yellow, yellow) right top no-repeat,linear-gradient(to bottom, yellow, yellow) right top …

go语言常见cache库

摘自 https://zhuanlan.zhihu.com/p/624248354

带有多选和突出显示关键字的自定义下拉选择框(动态)

本文是在上一篇的基础上改造成 根据输入关键词动态筛选选项列表,然后实现多项选择并且关键词高亮。 上一篇:带有多选和突出显示关键字的自定义下拉选择框(静态) >> 带有多选和突出显示关键字的自定义下拉选择框: Custom Dropdown Select Box with Multiple Selectio…

2024.11.26(周二)

旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。 实验要求: 1. 画出对应的类图; 2. 提交源代码; 3. 注意编程规范。1、类图2、源代码 #include<iostream> using namespace …

多人编辑的终极指南,版本冲突不是问题!

在局域网环境下实现高效文档协同编辑,一直是企业和科研团队关注的焦点。版本冲突是这一过程中的核心技术挑战之一,它不仅关系到协作效率,还直接影响最终成果的质量。 在传统的文档协同中,多个用户同时编辑同一文档可能导致内容覆盖、丢失或逻辑混乱。这种问题常见于无版本控…

摄像机实时接入分析平台视频分析网关机动车结构化识别算法:“智眼识车”的技术革新

随着智能交通系统的发展,视频分析技术在机动车识别和监控中的应用越来越广泛。视频分析网关作为这一技术的核心组件,利用先进的算法对机动车进行结构化识别,以提升交通管理的效率和准确性。本文将探讨摄像机实时接入分析平台视频分析网关中机动车结构化识别算法的原理和应用…

HCIP-14 BGP基础

本文介绍了BGP基础知识,涵盖了:BGP产生的背景、AS的概念、BGP的特征等。 本文中我们详细地学习了BGP的对等体关系建立过程以及BGP状态机,学习时将对等体关系建立过程与状态机的转换相结合有助于理解记忆。不同于IGP路由协议,BGP不能自己发现、计算路由条目,其路由条目由IG…