校友会小程序开发笔记十三: 小程序前端缓存体系的设计与实现
存储
每个校友录小程序都可以有自己的本地缓存,可以通过 wx.setStorage/wx.setStorageSync、wx.getStorage/wx.getStorageSync、wx.clearStorage/wx.clearStorageSync,wx.removeStorage/wx.removeStorageSync 对本地校友录小程序缓存进行读写和清理。
校友会小程序隔离策略
同一个微信校友录小程序用户,同一个校友录小程序 storage 上限为 10MB。storage 以校友录用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据;不同小程序之间也无法互相读写数据。
插件隔离策略
同一校友录小程序使用不同插件:不同插件之间,插件与小程序之间 storage 不互通。
不同校友录小程序使用同一插件:同一插件 storage 不互通。
清理策略
本地缓存的清理时机跟代码包一样,只有在校友录小程序代码包被清理的时候本地缓存才会被清理。
校友会小程序缓存方法的类封装
微信缓存二次封装,有设置时效性的封装
/** * 写校友录小程序缓存 * k 键key * v 值value * t 秒(有效时间) */ function set(k, v, t = 86400 * 30) { if (!k) return null; wx.setStorageSync(k, v); let seconds = parseInt(t); if (seconds > 0) { let newtime = Date.parse(new Date()); newtime = newtime / 1000 + seconds; wx.setStorageSync(k + TIME_SUFFIX, newtime + ""); } else { wx.removeStorageSync(k + TIME_SUFFIX); } }
/** * 获取校友录小程序缓存 * k 键key * def 默认值 */ function get(k, def = null) { if (!k) return null; let deadtime = parseInt(wx.getStorageSync(k + TIME_SUFFIX)); if (deadtime) { if (parseInt(deadtime) < Date.parse(new Date()) / 1000) { wx.removeStorageSync(k); wx.removeStorageSync(k + TIME_SUFFIX); return def; } } let res = wx.getStorageSync(k); if (res) { return res; } else { return def; } }
/** * 删除校友录小程序缓存 * k键值 */ function remove(k) { if (!k) return null; wx.removeStorageSync(k); wx.removeStorageSync(k + TIME_SUFFIX); }
/** * 清除所有校友录小程序key */ function clear() { wx.clearStorageSync(); }
项目代码GIT: https://github.com/ccliqi/CC-almni