我的应用程序使用具有有限数量请求的API从另一台服务器接收数据。数据变化很少,但即使在刷新页面后也可能需要。
答案 0 :(得分:8)
尽管跨浏览器兼容性很重要,cookie
是唯一的选择,而不是网络存储。
但问题实际上取决于 您正在缓存哪种数据?
对于您正在尝试的内容,可能根本不需要cookie和网络存储。
我宁愿说,将整个页面缓存为cookie或web-storage都是愚蠢的。出于这些目的,服务器端缓存选项可能是更好的方法。
<强>更新强>
引用:
有关某些社交网络(fb,vk,google +)中用户活动的数据
使用mordernizr之类的库检测网络存储功能,如果不存在,则回退到cookie方法。 一个简单的例子
if (Modernizr.localstorage) {
// browser supports local storage
// Use this method
} else {
// browser doesn't support local storage
// Use Cookie Method
}
答案 1 :(得分:4)
我写了这个lib来解决同样的问题:
Cache your data with Javascript using cacheJS
以下是一些基本用法
// just add new cache using array as key
cacheJS.set({blogId:1,type:'view'},'<h1>Blog 1</h1>');
cacheJS.set({blogId:1,type:'json'}, jsonData);
// remove cache using key
cacheJS.removeByKey({blogId:1,type:'json'});
// add cache with ttl and contextual key
cacheJS.set({blogId:2,type:'view'},'<h1>Blog 2</h1>', 3600, {author:'hoangnd'});
cacheJS.set({blogId:3,type:'view'},'<h1>Blog 3</h1>', 3600, {author:'hoangnd'});
// remove cache with con textual key
// cache for blog 2 and 3 will be removed
cacheJS.removeByContext({author:'hoangnd'})
答案 2 :(得分:-1)
这里是从JQuery AJAX缓存数据的示例。因此,如果您只想在没有数据的情况下拨打电话,那真的很简单。只是这样做(示例)。在这里,我们首先检查是否有加载信息(在行,位置和发货日期上键入),只有在没有加载信息的情况下,我们才进行AJAX调用并将该数据放入缓存中:
var dict = [];
function checkCachedLoadLine(line, location, shipDate, callback) {
var ret = 0;
if(!((line+location+shipDate) in dict)) {
productionLineService.getProductionLoadLine(line, location, shipDate, callback);
}
return dict[line+location+shipDate];
}
...然后在回调中将值写入缓存
function callback(data) {
if (!data) {
document.getElementById('htmlid').innerHTML = 'N/A';
} else {
document.getElementById('htmlid').innerHTML = data[0];
dict[data[2]+data[3]+data[4]] = data[0];
}
}