Outputcache:VaryByHeader =“User-Agent”或VaryByCustom =“Browser”?

时间:2011-05-15 08:15:08

标签: asp.net caching

我不确定VaryByHeader="User-Agent"VaryByCustom="Browser"之间的差异。后者会创建较少的缓存页面是正确的吗?或者换句话说,如果我只希望缓存不同的浏览器类型(和版本),后者是更好的选择?

任何建议的Thx! sl3dg3

2 个答案:

答案 0 :(得分:16)

来自MSDN文章 - ASP.NET Caching: Techniques and Best Practices

  

为了为每个浏览器启用单独的缓存条目,可以将VaryByCustom设置为“浏览器”的值。此功能内置于缓存模块中,并将为每个浏览器名称和主要版本插入单独的缓存版本的页面。

我认为这意味着以下的用户都将被视为IE9.0,并创建一个缓存条目:

  • Mozilla / 5.0(Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))
  • Mozilla / 5.0(Windows; U; MSIE 9.0; Windows NT 9.0; en-US)
  • Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 7.1; Trident / 5.0)

但如果您使用VaryByHeader="User-Agent"

,则会创建3个条目

答案 1 :(得分:3)

用户代理可以拥有更多的东西,而不仅仅是浏览器,比如操作系统甚至包括.NET在内的一些插件,所以,猜测浏览器应该有更少的缓存页面。

此外,这是最佳做法页面建议使用的内容:

http://msdn.microsoft.com/en-us/library/aa478965.aspx

同样从这篇最佳实践文章中我可以看到browser因浏览器版本而异。那是我唯一的恐惧,他们已经掩盖了它的好处!

  

为了启用单独的缓存   每个浏览器的条目,VaryByCustom   可以设置为“浏览器”的值。   此功能内置于   缓存模块,并将插入   单独的页面缓存版本   对于每个浏览器名称和主要   版本

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"  %>

请注意,即使使用了用户代理,您也不会拥有这么多的页面副本,因此,我认为这不是一个大问题。