小程序的缓存是一个非常重要的东西。
小程序的最大缓存大小约为10MB。10MB是很大的空间......
这么大的空间在使用的时候,是需要好好考虑的,不可能把所有东西都放进去,一不小心就会塞满……但是如果合理利用的话,它确实很有用。
我计划未来在小程序中加入即时聊天功能,现阶段只对接腾讯AI智能聊天接口。
聊天部分我们会在后面的教程里讲到,先说缓存:
我将用户和机器人的聊天记录都存到缓存中,然后再显示回来。我的初衷是想像微信一样保存聊天记录。也就是下次登录的时候,你上次的聊天记录还是可见的。但是由于微信的缓存空间太大,我担心如果不经常清除聊天记录,缓存满了,数据存不进去,就会出问题。
所以我们在这里做了一些处理,每次进入之前都清除一下缓存。
接下来我们来看看一些缓存方法:
1:wx.()存储缓存
接口调用结束回调函数(调用成功或者失败都会执行)
示例代码:
wx.setStorage({ key:"key", data:"value" }) try { wx.setStorageSync('key', 'value') } catch (e) { }
同步版本:wx.(key,任意数据)
2:wx.()从本地缓存中异步获取指定key的内容
接口调用结束回调函数(调用成功或者失败都会执行)
这种方式是异步的,不会阻塞程序。但是在实际开发中可能会遇到这样的问题:我需要先从缓存中获取用户信息,然后根据是否有用户信息再做其他操作。但是如果异步读取缓存的话,在获取到用户信息之前就会执行下一步操作。这时候有两种解决方案:
(1):使用同步版本的wx.()wx.(key, any data ),但是在生命周期函数中调用时并不会执行这个同步版本,这个好像是微信机制的问题,不过还是可以使用的。
(2):使用wx.()的回调函数,在获取成功的回调函数中执行下一步的操作。
我使用了第二种方法,对我来说效果很好。
示例代码:

wx.getStorage({ key: 'key', success (res) { console.log(res.data) } }) try { var value = wx.getStorageSync('key') if (value) { // Do something with return value } } catch (e) { // Do something when catch error }
同步方式:wx.(key,任意数据)
3:wx.()从本地缓存中删除指定键
接口调用结束回调函数(调用成功或者失败都会执行)
示例代码:
wx.removeStorage({ key: 'key', success (res) { console.log(res) } }) try { wx.removeStorageSync('key') } catch (e) { // Do something when catch error }
同步方式:wx.(key)
4:wx.()异步获取当前相关信息
示例代码:
wx.getStorageInfo({ success (res) { console.log(res.keys) console.log(res.currentSize) console.log(res.limitSize) } }) try { const res = wx.getStorageInfoSync() console.log(res.keys) console.log(res.currentSize) console.log(res.limitSize) } catch (e) { // Do something when catch error }
同步方法:wx.()
5:wx.()清除本地数据缓存
接口调用结束回调函数(调用成功或者失败都会执行)
示例代码:
wx.clearStorage() try { wx.clearStorageSync() } catch(e) { // Do something when catch error }
同步方法:wx.()
以下是我对微信小程序缓存的一些个人看法,可能我的水平比较低,理解能力还不够。
有些地方我觉得应该用同步缓存,但是下面这段代码无法获取到我上面用同步缓存设置的值,必须用异步缓存才能获取到,这个我不是很理解,大家有类似的情况吗,分享一下经验吧。