微信小程序之本地缓存

目前,微信给每一个小程序提供了10M的本地缓存空间(哎哟妈呀好大)javascript

  1. 有了本地缓存,你的小程序能够作到:
    • 离线应用(已测试在无网络的状况下,能够操做缓存数据)
    • 流畅的用户体验
    • 减小网络请求,节省服务器资源
  2. 哪些数据适合方缓存:
    • 热数据
    • 静态数据(用户数据,服务器受权ID等)
    • 网络地址(图片、文件等网络地址)
    • 分页列表数据及详情内容
  3. 通常的缓存系统采用键值对的方式完成数据插入和读取,经过对key进行一次Hash算法获得一个惟一值,并与value绑定起来;查询的时候对根据Hash后的key查询,算法空间复杂度O(1);
  4. 小程序本地缓存的实现基于上述方式实现。可是数据到底是存储在ROM,仍是存储在RAM后进行持久化,这个问题有待考究。
  5. 对本地缓存数据操做分为同步和异步两种。同步方法有成功回调函数,表示数 据处理成功后的操做。下面是小程序提供本地缓存操做接口:
操做 异步方法 同步方法
插入 wx.setStorage wx.setStorageSync
读取 wx.getStorage wx.getStorageSync
删除 wx.removeStorage wx.removeStorageSync
清空 wx.clearStorage wx.clearStorageSync
获取缓存信息 wx.getStorageInfo wx.getStorageInfoSync

以Sync结尾都是同步方法。同步方法和异步方法的区别是:java

  • 同步方法会堵塞当前任务,直到同步方法处理返回。
  • 异步方法不会塞当前任务。

6.下面以插入缓存的两个方法说明同步和异步的区别:算法

  1. 先调用异步方法,再调用同步方法
Page({
    save: function(e){ console.log('开始保存') wx.setStorage({ key: 'key1', data: 'data1', success: function(res){ console.log('异步保存成功') } }) wx.setStorageSync('key2', 'data2') console.log('同步保存成功') } })

执行结果:
小程序

能够看出,同步方法比异步方法先保存成功,说明异步方法没有阻塞当前任务。api

  1. 先调用同步方法,再调用异步方法
Page({
    save: function(e){ console.log('开始保存') wx.setStorageSync('key2', 'data2') console.log('同步保存成功') wx.setStorage({ key: 'key1', data: 'data1', success: function(res){ console.log('异步保存成功') } }) } })

执行结果:
缓存

能够看出,异步方法只有等到同步方法执行成功才会执行。服务器

缓存API提供了一个获取本地缓存信息的接口wx.getStorageInfo,有了它,开发者能够在已有api上再次封装,好比加入缓存时间、不覆盖插入、批量删除、判断当前缓存大小等。微信

最后一个是缓存隔离级别的问题:网络

  1. 同一手机,不一样小程序应用,至少在逻辑存储上确定不是共享缓存,知足应用级别隔离。
  2. 同一手机,同一个小程序,不一样微信用户扫码使用,经测试,也不共享缓存,目前测试条件下,是用户级别隔离。
  3. 同一手机,同一个小程序,同一微信用户两次扫码使用,经测试,是共享缓存。
  4. 同一手机,同一个小程序,不一样微信用户切换使用(分别扫码两次),经测试,同一个用户共享缓存,不一样用户间不共享缓存。

目前能够推断在真机调试条件下,每一个小程序扫码用户都会分配10M的本地缓存。
以上是我的在真机测试获得的结果,结果不必定彻底准确,仅供参考。异步

相关文章
相关标签/搜索