根据官方给的文档资料(https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html)数据缓存wx.setstoragesync和wx.setstorage微信默认的机制是设置了无限长的过期时限。同一个微信用户,同一个小程序 storage 上限为 10MB。localStorage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据。
所以如果我们只想让数据存储24小时后就再次获取新的数据,我们可以参考诸如 Cookie 这样的缓存机制,我们自己创建一个过期时间。在设置某缓存数据 A 的时候,我们可以同时设置一个过期时间值的数据缓存 B,在下一次打开该页面的时候,不仅需要判断数据 A 是否存在,也需要比较 B 与当前时间,如果符合要求则使用本地缓存的数据 A,否则则重新拉取数据并刷新 A 和 B。自定义函数代码如下:
getNew: function(id) {
let res = 0;
let timestamp = Date.parse(new Date());
let expiration = timestamp + 24*60*60*1000; //缓存24小时
let data_expiration = wx.getStorageSync('data_expiration_' + id);
if (data_expiration) {
if (timestamp > data_expiration) {
wx.removeStorageSync('data_expiration_' + id); //清除指定缓存
wx.setStorageSync('data_expiration_' + id, expiration);
res = 1;
}
} else {
wx.setStorageSync('data_expiration_' + id, expiration);
res = 1;
}
return res;
}
wx.setstoragesync和wx.setstorage的区别
以Sync(同步,同时)结尾的都是都是同步缓存,二者的区别是:异步不会阻塞当前任务,同步缓存直到同步方法处理完才能继续往下执行。
通俗来讲,异步就是不管保没保存成功,程序都会继续往下执行,同步是等保存成功了,才会执行下面的代码。
使用异步性能会更好;而使用同步,数据会更安全。
缓存可以跨页面获取,留在程序中。也可以通过代码清除缓存。函数如下:
wx.clearStorageSync();//清除所有缓存
wx.removeStorageSync('key');//清除指定缓存