正在Javascript Vanilla中缓存GET响应

Caching GET response in Javascript Vanilla

本文关键字:GET 响应 缓存 Javascript Vanilla 正在      更新时间:2023-09-26

我注意到Firefox不会自动缓存GET请求。遵循我使用的代码:

var ajax = new XMLHttpRequest();
ajax.open("GET","page.php?val=" + val,true);
ajax.send();

使用jquery可以给出cache: true;,我如何使用Vanilla Javascript(客户端)在缓存中保存?也可以决定多长时间?你能给我一个代码的例子吗?提前谢谢!

Web缓存在很大程度上由服务器发送的头文件控制(Expires:etc.)。浏览器有时会"欺骗"并且不会真正缓存,即使头文件允许他们。。。可能是因为用户使用他们的UI关闭了缓存,例如将缓存大小设置为零。但是,那些"欺骗"另一个方向的浏览器,即使头文件不允许,也会进行缓存,这种情况(有充分的理由)极为罕见。

如果缓存不适合您,它是文件和服务器(或者可能是浏览器配置)的函数,而不是任何浏览器类型或版本的函数。(换言之,如果服务器发送了所需的标头,Firefox的缓存会很好。)标头由不同的服务器和不同的提供商以多种方式控制。对于Apache服务器,细节可能在".htaccess"文件中,通常可以使用预先编写的模板。

首先,使用HTML4,无论你使用什么工具,无论你的程序做什么,你都无法从客户端控制网络缓存。HTML5中新的"在线应用程序缓存"或"appcache"提供了一个通用异常。。。但也有其他限制,例如关于"每个站点一个"answers"同源"的限制。

您可以使用一个简单的散列来缓存响应,比如:

var cache = {};
function getData(variable) {
    if (cache[variable]) {
        return cache[variable];
    }
    // previous ajax code to get the data...
    // in the response handler, do:
    cache[variable] = data;
}

这是缓存机制的一个天真实现:只在页面的生存期内工作(即,直到页面被刷新或导航离开),没有任何过期机制,我相信还有其他缺点。例如,您可以使用localStorage来解决刷新问题。

但是,嘿,我写这篇文章没有报酬:)。