缓存更新后用户还是看到旧数据怎么办?
我在做前端接口缓存,用的是 localStorage 存接口返回的数据。但后台数据更新后,用户刷新页面还是看到老内容,除非手动清缓存。有没有办法自动判断数据是否过期?
我试过加时间戳字段,比如 cacheTime: Date.now(),然后每次读取时判断是否超过 5 分钟,但感觉逻辑有点乱,而且不同接口缓存策略不好统一管理。
现在代码大概长这样:
const cached = JSON.parse(localStorage.getItem('userProfile'));
if (cached && Date.now() - cached.cacheTime < 300000) {
return cached.data;
} else {
// 重新请求
}
有没有更优雅的缓存更新方案?比如结合 ETag 或者服务端通知?
具体来说,你可以这样做:
1. 服务端返回数据时,增加一个版本号字段,比如 version。
2. 前端存储数据时,除了存储数据本身,也存储这个版本号。
3. 下次请求时,带上这个版本号。
4. 服务端收到请求后,比较请求中的版本号和当前数据的版本号,如果不一样,则返回新的数据。
举个例子,代码可能看起来像这样:
这种方式可以更好地管理和同步缓存,避免手动清理缓存或者时间戳计算带来的麻烦。