检测浏览器的缓存是否已满

abi*_*one 7 javascript gmail caching xmlhttprequest

我们已经确定完整的浏览器缓存是我们的外联网出现问题的原因.它只影响我们的少数用户,但我们想提醒他们解决问题,并就如何自行解决问题给他们一些指导.

我们想要使用类似于GMail使用的系统.当检测到您的浏览器缓存已满时,它会显示一条警告消息,告知用户他们的缓存已满,并且可能导致GMail出现问题,以及清除浏览器时指向Gmail帮助页面的链接缓存.

有没有人知道是否有任何资源,或者如何使用JavaScript来检测浏览器的缓存是否完全表现得很糟糕?

谢谢.


澄清:我想,我们实际上试图检测的不是缓存是否已满,而是是否正在重新请求我们已将服务器端配置为存储在缓存中的脚本.服务器 - 以这种方式使浏览器表现得很奇怪,或者就像它的缓存行为不正常一样.


进一步澄清:谢谢大家对缓存的更新.我们的脚本正在发送正确的标题,我们只在IE6和IE7中看到这个问题 - Mozilla和WebKit浏览器似乎没有受到影响 - 但我仍然不确定我们如何使用JavaScript和/或XmlHttpRequest检查是否从缓存中检索了一个对象,从而让我们检查缓存是否表现不佳.

scu*_*ffe 5

浏览器的缓存如果已满,则不会引起问题......只需要一些小注释即可.

  1. 如果浏览器缓存已满,则浏览器只需下载新内容,而不是从本地缓存中提取内容.(例如,速度较慢)
  2. 如果浏览器缓存包含无效数据(例如JavaScript文件的旧副本),那么您可能会遇到问题.(不是因为缓存已满,而是因为您没有为用户提供新文件(Google用于:expires headers以及在更改脚本时如何更改文件的URL路径以确保"中断"缓存) )
  3. 在Internet Explorer中,当您将下载文件(例如Excel电子表格)推送给用户时,它必须进入缓存才能工作(IE错误) - 我不确定该文件是否大于用户的总缓存,如果这导致文件存储问题,并因此加载(Stackers请随时确认这种或那种方式)

更新: 根据您的说明,您需要确保发送到客户端的任何脚本都已正确缓存...这意味着:

  • 如果要下载新版本,请将URL更改为脚本(例如)
  • 一旦确定URL发生了变化,您就可以发送缓存标头,告诉浏览器将文件缓存很长时间(例如,您的JS库文件(例如jQuery)可能不会每小时,每天,每周甚至更改月)