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

时间:2010-05-14 15:09:04

标签: javascript caching gmail xmlhttprequest

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

我们想要使用与GMail使用的系统类似的系统。当它检测到您的浏览器的缓存已满时的行为不正常时,它会显示一条警告消息,告知用户他们的缓存已满,并且可能导致GMail出现问题,以及指向Gmail Help page on clearing your browser's cache

有没有人知道是否有任何资源,或者如何使用JavaScript来检测浏览器的缓存 full 表现不佳的示例?

感谢。


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


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

3 个答案:

答案 0 :(得分:5)

浏览器的缓存 不会 如果已满,则会导致问题...带有一些小注释。

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

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

答案 1 :(得分:0)

这可能无法正常工作。但它只是一个想法:

var img = new Image();
(new Image).src = "imageWithFarFutures.png";
window.onload = function(){
    document.getElementById("someIframe").src = "imageWithFarFutures.png";
    // NOW if the server DOES get a FRESH request for "imageWithFarFutures.png"
    // wouldn't it mean that the browser has kicked it out of its cache?
};

答案 2 :(得分:0)

考虑发送一个标题,让您的应用程序永远不会缓存您的内容,并让它立即过期。