微信小程序之本地緩存


  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結尾都是同步方法。同步方法和異步方法的區別是:

  • 同步方法會堵塞當前任務,直到同步方法處理返回。
  • 異步方法不會塞當前任務。

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('同步保存成功') } }) 

執行結果:

可以看出,同步方法比異步方法先保存成功,說明異步方法沒有阻塞當前任務。
2. 先調用同步方法,再調用異步方法

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的本地緩存。
以上是個人在真機測試得到的結果,結果不一定完全准確,僅供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM