小程序官方API提供了设置缓存和读取缓存的api,不过都是永久缓存,除非用户手动清除,否则会一直留在用户手机 。而我们都知道,本地缓存最大为10M。实际开发过程中,或者为了给用户节省内存,或者为了设置信息即时性,我们需要对部分缓存设置时效性,在它到期之后自动删除。
一、关于缓存方法微信官方api如下
1.异步缓存
wx.setStorage(OBJECT)
wx.getStorage(OBJECT)
wx.getStorageInfo(OBJECT)
wx.removeStorage(OBJECT)
wx.clearStorage()
2.同步缓存
wx.setStorageSync(KEY,DATA)
wx.getStorageSync(KEY)
wx.getStorageInfoSync
wx.clearStorageSync() ...
关于具体的使用方法请去看官方文档
二、下面就是记录关于设置缓存时效性的方法,说到底也就是对这些缓存方法进行二次封装
//设置时效缓存,time为有效时间,(单位:小时,不填则默认24小时)
function setStorageSyncHour(key, value, time) {
wx.setStorageSync(key, value)
var t = time ? time : 24;
var seconds = parseInt(t * 3600);
if (seconds > 0) {
var timestamp = Date.parse(new Date());
timestamp = timestamp / 1000 + seconds;
wx.setStorageSync(key + 'dtime', timestamp + "")
} else {
wx.removeStorageSync(key + 'dtime')
}
}
//设置时效缓存,time为有效时间,(单位:秒,不填则默认3600s)
function setStorageSyncSecond(key, value, time) {
wx.setStorageSync(key, val)
var t = time ? time : 3600;
var seconds = parseInt(t);
if (seconds > 0) {
var timestamp = Date.parse(new Date());
timestamp = timestamp / 1000 + seconds;
wx.setStorageSync(k + 'dtime', timestamp + "")
} else {
wx.removeStorageSync(k + 'dtime')
}
}
//读取缓存,若缓存不存在,返回def,def为可选参数,表示无缓存数据时返回值(支持字符串、json、数组、boolean等等)
function getStorageSyncTime(key, def) {
var deadtime = parseInt(wx.getStorageSync(key + 'dtime'))
if (deadtime) {
if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {
wx.removeStorageSync(key);
wx.removeStorageSync(key + 'dtime');
if (def) { return def; } else { return; }
}
}
var res = wx.getStorageSync(key);
if (res) {
return res;
} else if (def) {
return def;
} else {
return;
}
}
module.exports = {
setStorageSyncHour: setStorageSyncHour,
setStorageSyncSecond: setStorageSyncSecond,
getStorageSyncTime: getStorageSyncTime
}
这里比较时间的方法就是使用parse方法。
parse() 方法可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数。就可以对时间进行比较
网友评论