在ASP.net MVC 5服务器或客户端

时间:2017-04-27 13:50:35

标签: c# asp.net asp.net-mvc caching asp.net-mvc-5

我正在阅读ASP.Net MVC 5中的一个教程,我学习了缓存。但我无法理解是什么决定我应该在客户端还是服务器上缓存。

以下是代码段。

对于客户:

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client)]
public ActionResult SelectLocation()
{
}

对于服务器:

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Server)]
public ActionResult SelectLocation()
{
}

问题:有人可以告诉我何时应该应用客户端缓存以及何时应该使用服务器缓存。还有我应该寻找的缺点或任何后果?

5 个答案:

答案 0 :(得分:2)

关于OutputCache,“客户端”缓存只是意味着缓存控制头和/或过期头将随响应一起发送,表明客户端可以缓存文献。通常,客户端,特别是如果它是Web浏览器,将选择这样做。如果再次需要相同的资源,则不需要发出新请求。但是,浏览器可能偶尔会发出一个HEAD请求,以检查是否有新版本的资源。

“服务器”缓存仍然与OutputCache有关,服务器将在本地缓存响应,通常在内存中。这意味着只要缓存仍然有效,服务器就不会再次实际呈现操作,而是仅提供缓存资源。

两者之间的主要区别在于服务器缓存将用于该资源的所有请求,无论客户端当前正在发出请求,而客户端缓存显然仅限于该特定客户端。服务器不需要再为该客户端呈现操作,而是为下一个发生的客户端呈现。

但是,默认值为Any,其中包括服务器和客户端缓存(以及其他位置)。换句话说,服务器和客户端缓存并不是互斥的,通常你们两者都要做到最大限度地减少服务器需要做的工作和响应所需的请求量。

答案 1 :(得分:0)

看看here。这是非常好的解释

默认情况下,内容缓存在三个位置:Web服务器,任何代理服务器和用户的浏览器。您可以通过更改location参数来控制内容的缓存位置。当您在服务器上缓存时,每个用户都会收到相同的内容,而当它只是客户端时,缓存的内容会因用户而异。

location参数具有适用于大多数方案的默认值Any。但有些情况下,您需要对缓存数据进行更多控制。

假设您要缓存已登录的使用信息,那么您应该在客户端浏览器上缓存数据,因为此数据特定于用户。如果您将在服务器上缓存此数据,则所有用户都将看到相同的错误信息。

您应该将数据缓存在服务器上,这对所有用户都是通用的并且是敏感的。

答案 2 :(得分:0)

一种观点可以通过缓存失效方案。在客户端缓存时,您需要调整客户端命中的URL以避免缓存命中/强制重新计算响应。在服务器端缓存时,您可能更容易使缓存的内容无效。请参阅此问题:How to programmatically clear outputcache for controller action method

答案 3 :(得分:0)

https://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation(v=vs.110).aspx

中所述

客户端将指示浏览器将html缓存在自己的缓存中。 优点:更快,因为它在浏览器上缓存,不占用服务器内存。 缺点:它可以依赖用户浏览器设置(缓存大小,过期等),用户可以自行删除

服务器将在服务器上保留缓存的html 优点:不依赖于浏览器规则,因为它发送无缓存,您控制缓存,而不是用户。 缺点:比客户端慢,因为它总是包含传输,占用服务器内存

答案 4 :(得分:0)

处理缓存控制时有多种选择的原因很简单;没有适用于所有网站的通用正确答案。

一个“名片”网站,它的设计和内容非常静态,并且是服务器上唯一的网站,几乎可以设置为在无处不在的时间段内缓存它。但是,如果该服务器实际上托管了一千个站点,那么我们就开始担心服务器缓存及其可行性,因为如果内存不足,IIS将开始转储缓存项,因此我们可能不希望该服务器缓存。

如果我们的ecomm网站流量非常高,每小时都有产品更改和添加,我们会希望减少max-age以使内容保持最新。但同样,由于所有动态内容处理,这些要求更高的应用程序的内容生成可能会降低服务器速度,特别是如果此站点位于共享服务器上。

一般互联网上有大量资源,MSDN,在这里您可以查看以帮助您确定最适合您的内容。由于我在单一和共享环境中使用的网站种类繁多,因此我将其作为服务器和客户端位置,其中一些将使用Last-Modified标头,而其他网站则使用eTag