微信的数据存储功能分析
存储
每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage/wx.setStorageSync、wx.getStorage/wx.getStorageSync、wx.clearStorage/wx.clearStorageSync,wx.removeStorage/wx.removeStorageSync对本地缓存进行读写和清理。
微信数据存储提供的能力:异步获取本地缓存数据、同步获取本地缓存数据
合理使用微信缓存,能大大减少对服务端的压力。
隔离策略
同一个微信用户,同一个小程序 storage 上限为 10MB。storage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据;不同小程序之间也无法互相读写数据。
根据数据隔离策略,决定了在单个客户端无法存储大量数据【例如客户照片、视频等】。但是实际上很多客户10MB对于大多数应用来说,已经足够了。
清理策略
本地缓存的清理时机跟代码包一样,只有在代码包被清理的时候本地缓存才会被清理。
根据清理策略说明:缓存实际上是是临时性的,只能作为一个临时数据,不应该存储持久性的数据。
小功能实现
目标
缓存从后端获取的数据,以bilibili的番剧列表为例【当然域名需要在微信公众平台配置,肯定不会过审,所以这里请求用模拟的】。?
每个进入B站的用户都会获取主页的番剧列表。而番剧列表是不会随意变动的。假设是在微信小程序里。我们完全可以通过微信提供的缓存能力。对数据进行缓存,每日更新一次或者多次,减轻服务端压力。
实现
服务端:模拟bilibili的服务端返回。
客户端:一个简单按钮,通过控制台日志展示效果。
js代码方法:
/*** 获取B站番剧列表*/getBilibiliList: function(){const that = this;// 控制台展示当前缓存数据内容wx.getStorageInfo({success (res) {console.log("Local:"+res.keys)console.log(res.currentSize)console.log(res.limitSize)}});var res = wx.getStorageInfoSync();console.log("Sync:"+res.keys);console.log("Sync:"+res.currentSize);console.log("Sync:"+res.limitSize);var finalText;var key = "bilibilListText";// 获取缓存数据wx.getStorage({key: key,success (res) {console.log('获取本地缓存成功:'+res.data);finalText = "缓存中获取的数据:"+res.data;wx.removeStorageSync(key);},fail (res){// 此处省略从后端获取数据finalText = "\n Re:从零开始的异世界生活";console.log('获取本地缓存失败:'+key+":"+res.data);try {wx.setStorageSync(key, finalText);} catch (e) {console.log(e);}},complete(){that.setData({"bilibilListText" : finalText});}});}