【问题标题】:Do browsers cache images?浏览器会缓存图片吗?
【发布时间】:2012-09-17 20:32:44
【问题描述】:

我有一个带有一些 Javascript 的 PHP 页面,它会在固定时间间隔(5 秒)后更改 IMG 标记上的 SRC 属性。我循环浏览了固定数量的图像。 PHP 为所有图像 URL 构建一个字符串数组。图片很小,小于 10k。

我如何判断浏览器是否正在缓存图像,如果没有,我必须做些什么来确保浏览器缓存它们?

【问题讨论】:

  • 浏览器当然会缓存图片。
  • 是的,安装 firebug 或 webkit 调试器,它会告诉你浏览器是否使用了缓存版本。人们通过在文件末尾附加一个数字来绕过它
  • 大部分情况下,浏览器的缓存是由用户控制的。
  • @j08691 这是不正确的。大多数主流浏览器都会坚持正确配置的 Cache-Control 标头,让您可以有效地控制浏览器如何缓存您的内容。

标签: php html browser-cache


【解决方案1】:

是的,浏览器会缓存它们,即使您的标题另有说明也是如此。我发现最好的组合是发出必要的 Cache-Control 标头以及将随机字符串附加到源 URL。

例如,以秒为单位设置最大年龄:

header("Cache-Control: max-age=3600");

然后将随机字符串附加到您的 img 源。这需要在 Javascript 中,而不是在 PHP 中,因为一旦您的 URL 是在 PHP 中生成的,它们就不会使用新的随机字符串不断更新:

var randomString = "" + new Date().getTime();
var imageUrl = yourImageArray[someIndex] + "?" + randomString;

希望你能明白。

【讨论】:

  • 好的,我该怎么做?我在 PHP 文件中引用了几个图像,如何确保只有循环中的图像被缓存?我不关心其他人,所以一个简单地将所有内容缓存大约 1 小时的解决方案也可以......
  • 好的,我有点误解了您的原始请求,并更新了我的答案,将缓存控制设置为 1 小时。此外,您是否想让浏览器将图像缓存一个小时,然后确保一个小时后浏览器强制它们重新加载?
  • 我认为没有人会在我的网站上停留超过一个小时 - 我只是不想每 5 秒加载 10k 图像......这只是一种不必要的浪费。
【解决方案2】:

如果您需要尝试强制浏览器不缓存某些图像,您应该正确配置服务器为每个图像请求发送的标头,以便它们发送正确的 Cache-Control 标头。

【讨论】:

  • 我想缓存它们 - 只是不知道如何使它们成为。
  • 正如原始问题的 cmets 中提到的,您可以使用 Firebug、WebKit 调试器、开发者工具等来查看浏览器发出的每个单独的请求。如果图像已加载,但没有网络请求,则从缓存中填充。
猜你喜欢
  • 2012-02-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2018-08-17
  • 2016-09-16
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多