从浏览器的缓存中清除对象mvc

问题描述:

我在c#中有一个MVC应用程序。我有一个包含多个图像的页面。一旦页面被加载,所有的图像都被存储在浏览器的缓存中。但是当我改变图像时,它会替换旧图像。由于旧图像和新图像具有相同的名称,并且正在从浏览器的缓存中提取图像。但是,如果使用Ctrl + F5刷新页面,则会呈现新图像。有什么办法可以从浏览器的缓存中只删除旧图像吗?我无法删除浏览器的所有缓存,因为它包含许多应该缓存的图像。只有该图像应该从正在更改的缓存中删除。从浏览器的缓存中清除对象mvc


非常感谢您的回复。有一点我应该在这里提到: 1.我无法使用查询字符串,因为单个页面包含许多具有不同图像的部分,并且该特定图像在不同部分呈现。 2.我无法添加新的guid或日期时间与图像的url,因为如果我这样做,然后每次刷新页面时都会发生新的服务器调用,并且图像将来自服务器,并且该页面将呈现相同的图像不少地方。

因此,为了减少服务器调用并提高性能,我只能从浏览器缓存中删除该图像。

不可能不通过一大堆麻烦去,相信我,你真的只是想在这里按Ctrl + F5)

是否像有一个像版本或创建的日期时间的唯一值?如果是这样,你可以将它添加到文件名或作为查询字符串。浏览器会缓存图像,但QueryString中的新值将请求新图像。

如果您保存一个新图像,比如说为用户提供一个新的配置文件图像,您可以使用Guid.NewGuid()作为文件名(或文件名的一部分),以保证独特的图像这将在浏览器中重新加载。

+0

非常感谢您的回复。有一点我应该在这里提到: –

完成此操作的一种方法是在映像更改时更改的图像URL上附加查询字符串。一滴死了简单的使用:

'image.jpg?' + new Date().getTime() 

这会给我这样的URL:

"image.jpg?1321626971855" 

现在你会这样更智能地在你的JavaScript仅通过改变时间戳(或添加时间戳)当图像被改变时。

+0

我认为@Cymen建议的解决方案可能是实现这一目标的最快方法。长期以来,您可能需要熟悉HTTP缓存,以及如何配置Web服务器以为每种文件提供正确的缓存信息:http://betterexplained.com/articles/how-to-optimize-your- site-with-http-caching/ –

+0

这是一个很好的解决方案,但我认为你需要提及的是,图像永远不会被你的简单例子缓存。 – Dallas

+0

我宁愿不使问题复杂化。我假设URL正在通过JavaScript进行更改,因此,仅更改已更改图像的URL是明智的。这是一个具体的实现。这是一个很好的观点,非常好! – Cymen