【发布时间】:2026-01-17 20:40:01
【问题描述】:
我的应用程序使用请求数量有限的 API 从另一台服务器接收数据。数据很少更改,但即使在刷新页面后也可能需要更改。
- 什么是这个问题的最佳解决方案,使用 cookie 或 HTML5 网络存储?
- 还有其他方法可以解决这个任务吗?
【问题讨论】:
标签: javascript html cookies web-storage
我的应用程序使用请求数量有限的 API 从另一台服务器接收数据。数据很少更改,但即使在刷新页面后也可能需要更改。
【问题讨论】:
标签: javascript html cookies web-storage
就跨浏览器兼容性而言,cookie 是唯一的选择,而不是网络存储。
但问题实际上取决于您正在缓存什么样的数据?
对于您正在尝试的内容,可能根本不需要 cookie 和网络存储。
我宁愿说,将整个页面缓存为 cookie 或网络存储两者都是愚蠢的。出于这些目的,服务器端缓存选项可能是更好的方法。
更新:
引用:
有关用户在某些社交网络(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
}
【讨论】:
if(localStorage),为什么还要使用Modernizr?
我写了这个库来解决同样的问题:
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'})
【讨论】:
这是一个从 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];
}
}
【讨论】: