微信小程序之本地緩存

目前,微信給每一個小程序提供了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的本地緩存。
以上是我的在真機測試獲得的結果,結果不必定徹底準確,僅供參考。異步

相關文章
相關標籤/搜索