IIS(动态和静态)缓存、OutPutCache 和浏览器缓存有啥区别

Posted

技术标签:

【中文标题】IIS(动态和静态)缓存、OutPutCache 和浏览器缓存有啥区别【英文标题】:What are difference between IIS (Dynamic and Static) cache,OutPutCache and browser cacheIIS(动态和静态)缓存、OutPutCache 和浏览器缓存有什么区别 【发布时间】:2012-03-28 15:46:03 【问题描述】:

IIS (Dynamic and Static)缓存、OutPutCachebrowser cache有什么区别?

我想我对他们感到困惑。

浏览器是否缓存所有的js或css文件?

如果我使用 IIS 缓存而不使用 OutputCache 会发生什么?

如果我同时使用会发生什么?

【问题讨论】:

【参考方案1】:

OutPutCache 是一个页面/控件缓存,它保存在服务器上,以从该页面/控件的呈现中获得处理速度。

browser cache 是您在页面上设置的标题命令,并指示客户端浏览器将页面保留在客户端计算机缓存中一段时间​​,而不是从服务器读取。

static cache 用于为所有用户共同的内容设置缓存,Dynamic cache 用于为同一页面设置不同的缓存并取决于用户或其他参数。你也可以说静态是不变的内容(例如图像,html页面等)的缓存,动态是像aspx页面一样变化的内容的缓存。

IIS 可以为图像和所有此类不变的内容设置缓存,并且您对浏览器说要保留“长时间”。

你需要使用所有缓存的组合来获得最好的结果并且不是什么用什么不可以。变化不大的静态内容缓存多,动态内容缓存少。

浏览器是否缓存所有 js 或 css 文件?

浏览器只做你说他做的事情。因此,您需要在浏览器的页眉上设置您希望浏览器将此文件保留在客户端缓存中的时间。如果您没有设置任何内容,则 IIS 会为 Js 和 Css 和图像等静态内容设置文件创建日期,浏览器可以使用它来询问服务器是否需要再次读取它。

静态和动态

关于静态和动态缓存的更多信息是动态缓存上的浏览器询问服务器是否需要更新,如果答案是肯定的,则再次读取页面。这样浏览器总是调用服务器,但并不总是取回内容。

另一种方式是静态的,在这个缓存中浏览器缓存内容并且从不要求服务器重新读取它。例如,对于静态内容的图像,您设置了一个大缓存,并且浏览器不再询问服务器,而是使用客户端缓存中的图像。

您可以在 web.config 上设置此静态内容缓存

<staticContent>
    <clientCache cacheControlMaxAge ="8.00:00:00" cacheControlMode="UseMaxAge" />
</staticContent>

浏览器的动态缓存是您需要以编程方式创建的东西。您在标头上设置一个参数,当浏览器请求内容时,您读取此参数并决定要重播的内容、新内容或从缓存中读取的命令。

一些例子:Create ETag filter in ASP.NET MVC

http://jagbarcelo.blogspot.com/2009/03/conditional-get-and-etag-implementation.html

Generating etags for images in asp.net?

 if I use both IIS cache and OutputCache?

其实这是两个不同的想法,由他们自己行动。让我们看看发生了什么的一些步骤。

Client A Browser : 请给我页面default.aspx

服务器响应:好的,请稍等。让我看看我在 OutpuCache 上有没有?不,我现在制作并将其保存到 OutPutCache。现在我发给你。 (waiting time 600 ms + 70ms Network Lag) + 2000ms to download the mage

Client B Browser:请给我页面default.aspx

服务器响应:好的,请稍等。让我看看我在 OutpuCache 上有没有?是的,我从缓存中读取并发送它。 `(等待时间 100 ms + 70ms 网络延迟)+ 2000ms 下载法师

客户端A浏览器:请给我页面default.aspx,我最后的缓存说该文件的日期:12/Mar/2012。

服务器响应 : hmm 你不需要重新读取它,因为它没有被修改,使用你的本地缓存。 (waiting time 80 ms + 70ms Network Lag) + 0ms to download the page

在 OutputCache 上找到页面时,用户不会等待页面开始显示这么多东西。

当页面发现没有修改时,效果是用户几乎看对了页面,因为没有等待页面下载。

当内容是静态的(如图像)并在缓存中找到时,浏览器会以正确的方式显示它而无需询问服务器,因此这是用户查看本地缓存中内容的更快方式。

【讨论】:

谢谢,但是如果我同时使用 IIS 缓存和 OutputCache 会发生什么?当请求到达服务器时,服务器上发生了什么?你能解释更多细节吗?如果我使用OutputCache,我的页面将缓存,当我使用 IIS 缓存时,似乎 IIS 缓存了缓存:-? .请解释更多 如果我希望我的 JSCSS 被缓存,我最好的选择是什么? @Kerezo 我将它们缓存为静态,带有两天的客户端缓存,最后是版本号,这样我就可以在更新时正确更改它们。我不会将它们缓存为完全静态的。但这是一个新的(很好的)问题,可以获得更多信息,因为我有很多代码。 @Kerezo 右键单击​​此页面并查看源代码,以查看我希望将它们缓存为静态并使用版本控制的内容。查看 js 和 css 目录和文件上的数字。 非常感谢亲爱的@Aristos。但在场景中你没有考虑IIS Cache。我的意思是当请求来到 IIS 并缓存页面时,它是否检查 OutPuCache ?如果我在 IIS 中使用 user-mode cache 并将其时间设置为 30 分钟,并且在我的页面中我使用 Outputchache 并将其时间设置为 15 分钟,如果用户在 16 分钟后请求会发生什么? IIS 7 中的user-modekernel-mode 缓存有什么区别?谢谢

以上是关于IIS(动态和静态)缓存、OutPutCache 和浏览器缓存有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net / IIS 7.5 无法识别用于 OutputCache 的 jMeter

WinServer-IIS-压缩及缓存

如何使控制器中的缓存数据 [OutputCache] 无效?

C# - 缓存OutputCache基础配置

ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache

高性能开发规范