手机版

ASP.NET核心缓存静态资源详解

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

背景

缓存静态资源,如样式表、JavaScript或图像文件,可以提高网站的性能。在客户端,静态文件总是从缓存中加载,这可以减少对服务器的请求数量,从而减少获取页面及其资源的时间。在服务器端,因为它们的请求更少,服务器可以处理更多的客户端,而无需升级硬件。

虽然缓存是一件好事,但是您必须确保客户端始终运行最新版本的应用程序。当您部署网站的下一个版本时,您不希望客户端使用文件的过时缓存版本。

方案:

为了确保用户始终使用最新版本的文件,我们必须为每个文件版本提供一个唯一的网址。有许多策略:

使用查询字符串:http://sample.com/file.js? V=123重命名文件:http://sample.com/file.123.js创建一个目录:http://sample.com/123/file.jsASP.NET核心提供了一个机制,通过使用TagHelper来追加版本和查询字符串。它支持针对静态资源的最常见的HTML标签:脚本、链接和img。您所需要做的就是将asp-append-version='true '追加到相应的Html标记中:

link rel='样式表' href='~/css/site.css' rel='外部no follow ' ASP-append-version=' true '/脚本src=' http : ~/js/site . js ' ASP-append-version=' true '/脚本src=' http : ~/images/banner 1 . SVG ' ASP-append-version=' true '/浏览器中的演示文稿3360

link rel='样式表' href='/css/site.css?v=1wp 5zz 4e-mofx4 x2o 8 sew _ dmutepn5xfjk1vb 7 jkrc ' rel=' external no follow '/script src=' http :/js/site . js?v=ewamewsjbywml 2g _ kkgxzq5 npe-a3ichp 0 legzxczko '/script img src=' http :/images/banner 1 . SVG?v=gae _ emke BF-ybbrj 26 lpk GD 4 jkosh 1 evkjanow 9 i4u k '/每个文件都将有一个相应的v值,并存储在IMemoryCache中

文件的URL现在是唯一的,并且当文件改变时会改变,因此我们可以在响应中添加缓存头,以指示客户端文件可以永久存储在缓存中

实践

为了指示浏览器将文件存储在缓存中,我们必须发送缓存控制头文件和过期头文件,以实现HTTP/1.0兼容性。要添加这些头文件,我们使用OnPrepareResponse回调函数StaticFilesOptions。让我们修改这个启动. cs文件:

public void configure(iapplicationbuilder应用程序,ihostingenvironment env) {app。usestaticfiles(新的static files options { onpreparereresponse=context={//cache一年如果(!字符串。IsNullOrEmpty(上下文。上下文。请求。查询[' v ']){上下文。context . response . headers . add(' cache-control,new[] { 'public,max-age=31536000 ' });语境。上下文。响应。标头。添加('过期',新[] {日期时间。添加年份(1)。ToString(' R ')});//格式RFC 1123 } } });app。UseMvc(routes={ routes。MapRoute(name: 'default ',template : ' { controller=Home }/{ action=Index }/{ id?}');});}可以查看开发者控制台,发现静态资源缓存:

如果不想缓存静态文件,请修改Startup.cs文件:

App。usestatifiles(新的statifileoptions { onpreparereresponse=context={//缓存一年//以下操作是usestatifiles的内部默认实现if(!字符串。is ullrempty(context . context . request . query[' v '])//添加asp-append-version='true '后,v为查询参数{//context . context . response . headers . add(' cache-control ',new [] {'public,max。语境。context . response . headers . add(' cache-control,new[] { 'public,no-cache ' });语境。上下文。响应。标头。添加('过期',新[] {日期时间。添加年份(1)。ToString(' R ')});//格式RFC 1123 } } });你会发现不管怎么刷新,site.js?v=7 mknbu1tgql 1 bue ze3 j2r 151 hklhldko4 bbar-iqcy0文件总是被重新请求,并且不使用缓存机制。

结论

出于性能原因(客户端和服务器端),使用HTTP缓存很重要。使用ASP.NET核心,您可以使用提供的函数TagHelpers来生成版本控制的URL,并更改默认配置StaticFilesMiddleware来将头的Cache-control属性添加到资源URL中。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:ASP.NET核心缓存静态资源详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。