繁体   English   中英

ASP.NET应用程序中的浏览器缓存

[英]Browser Caching in ASP.NET application

有关如何在asp.net应用程序中进行浏览器缓存的任何建议。 我在网上找到了一些不同的方法,但不确定哪种方法最好。 具体来说,我想缓存我的CSS和JS文件。 它们确实会发生变化,但通常最多每月一次。

另一种技术是将静态图像,css和js存储在另一个正确设置了Expires标头的服务器(例如CDN )上。 这样做的好处是双重的:

  1. expires头将鼓励浏览器和代理缓存这些静态文件
  2. CDN将从服务器卸载静态文件。
  3. 通过为静态内容使用其他域名,浏览器将更快下载。 这是因为从四个或五个不同的主机名提供资源会增加下载的并行化
  4. 如果CDN配置正确并使用无cookie域,那么您就没有不必要的cookie来回传递。

值得注意的是,即使没有Cache-Control或Expires标头,大多数浏览器也会缓存JS和CSS等内容。 应该发生的事情是浏览器应该在每次需要时请求资源,但通常会得到“304未修改”响应,然后浏览器使用缓存项。 这可能仍然非常昂贵,因为它往返服务器但资源本身没有被发送,因此转移的字节是有限的。

IE没有关于缓存的具体说明,默认情况下会使用自己的启发式方法来确定是否应该重新请求缓存的项目。 尽管没有明确告知它可以缓存资源。 它的hueristics基于资源的Last-Modified日期,它越老,它现在改变的可能性就越小,这是它的典型推理。 非常愚蠢。

坦率地说,如果你想建立一个站点性能,你需要控制这样的缓存设置。 如果您无权访问这些设置,则不必担心性能问题。 只需告知赞助商它可能效果不佳,因为它们没有促成一个可以让您实现这一目标的平台。

最好的办法是在IIS中为要缓存内容的文件夹设置Expires标头。 这将告诉大多数现代浏览器和代理缓存此静态内容。 在IIS 6中:

  1. 右键单击要由浏览器缓存的文件夹(示例CSS或JS)。
  2. 单击属性
  3. 转到HTTP标头选项卡
  4. 检查“已启用内容过期”
  5. 设置一段很长的到期时间,例如“90天后过期”

雅虎开发者博客谈论这种技术

您可以通过在web.config中添加以下代码来缓存静态内容

 <system.webServer>
    <staticContent>
      <clientCache httpExpires="Tue, 12 Apr 2016 00:00:00 GMT" cacheControlMode="UseExpires" />
    </staticContent>
</system.webServer>

有关更多详细信息,请参阅clientCache文档

除非您将IIS配置为对js / css / image请求进行asp.net控制,否则默认情况下不会看到它们,因此您的最佳计划(长期可维护性)是故意调整防火墙/ trafficmanager / server上的响应头或者 (更好,以及世界上大多数人在这一点上做了什么) 在路径中对文件进行版本化即:

而不是在你的加价中写这个:

http://www.foo.com/cachingmakesmesad.css

用这个:

http://www.foo.com/cachingmakesmesad.css?v1

..并在需要有效清除缓存时更改版本号。 如果那是每次,那么你甚至可以添加一个GUID或日期戳,但我想不出任何我想要真正做到这一点的场合。


我认为你的问题是反缓存但重新阅读它我看到我在那里浪费了一个很好的答案:P

简而言之,浏览器通常非常积极地支持“简单”资源,因此您不必担心这一点,但如果您确实想要对其执行某些操作,则必须能够访问防火墙/流量管理器/ IIS由于上述原因(默认情况下ASP.NET不会有机会)。

但是......你绝对不能强制缓存,也不应该。 什么是和不是缓存是最终用户的决定,你所能做的就是强烈要求。

在.net中,您可以将JavaScript,CSS和图像设置为嵌入式资源。 然后.Net将为您处理文件过期。 这种方法的缺点是您必须为每组更改执行新的构建(这可能是一个好处,具体取决于您的部署和工作流程)。

您也可以使用ETag,但根据我的理解,在某些情况下,如果您混合使用IIS和承载图像的Apache Web服务器 ,(或者如果您计划将来切换),则无法正常工作。

您可以确保文件日期更新,让服务器为您处理,但您必须确保服务器配置正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM