微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解


Posted in Javascript onJanuary 17, 2017

微信小程序 缓存

关于本地缓存

1.wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)

可以对本地缓存进行设置、获取和清理。本地缓存最大为10MB

2.localStorage 是永久存储

一、异步缓存

wx.setStorage(OBJECT)

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容

wx.setStorage({

 key:"key",

 data:"value"

})

wx.getStorage(OBJECT)

从本地缓存中异步获取指定 key 对应的内容。

wx.getStorage({

 key: 'key',

 success: function(res) {

   console.log(res.data)

 }

})

wx.getStorageInfo(OBJECT)

异步获取当前storage的相关信息

wx.getStorageInfo({

 success: function(res) {

  console.log(res.keys)

  console.log(res.currentSize)

  console.log(res.limitSize)

 }

})

wx.removeStorage(OBJECT)

从本地缓存中异步移除指定 key 。

wx.removeStorage({

 key: 'key',

 success: function(res) {

  console.log(res.data)

 }

})

 二、同步缓存

wx.setStorageSync(KEY,DATA)

将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。

wx.getStorageSync(KEY)

从本地缓存中同步获取指定 key 对应的内容。

wx.getStorageInfoSync

同步获取当前storage的相关信息

wx.removeStorageSync(KEY)

从本地缓存中同步移除指定 key 。

三、清理缓存

wx.clearStorage()

清理本地数据缓存。

wx.clearStorageSync()

同步清理本地数据缓存

关于同步缓存和异步缓存的区别

以Sync(同步,同时)结尾的都是都是同步缓存,二者的区别是,异步不会阻塞当前任务,同步缓存直到同步方法处理完才能继续往下执行。

但是一般情况下不要用清除所有的缓存,如果想要清除相应的缓存,设置对应的缓存内容为空数组就好

 关于历史搜索

<input type="text" class="search-icon" placeholder="请输入要搜索的内容" bindinput="searchNameInput"/>
<text bindtap="setSearchStorage">搜索</text>


<view>
  <view>
    <text style="float:left;" bindtap="deleteHistory">历史搜索</text>
    <text style="float:right;" bindtap="deleteHistory">删除搜索历史</text>
  </view>
  <view>
    <view class="search-list" wx:for="{{searchData}}" wx:key="item">
      <view>{{item == null?'暂无数据':item}}</view>
    </view>
  </view>
</view>

 页面

这里有三个绑定事件

bindinput="searchNameInput" 获取用户输入的数据

bindtap="setSearchStorage" 设置本地存储

bindtap="deleteHistory" 删除历史搜索

//获取用户输入框的值
  searchNameInput:function(e){
    var that = this;
    that.setData({
      inputValue:e.detail.value
    })
  }

e.detail.value就代表了当前输入值

 当点击搜索的时候,bindtap="setSearchStorage"

//将用户输入的内容存入本地缓存,并且将搜索数据放到首页
setSearchStorage:function(){
  var that = this
  if(this.data.inputValue != ''){
    //调用API向本地缓存存入数据
    var searchData = wx.getStorageSync('searchData') || [] 
    searchData.push(this.data.inputValue) 
    wx.setStorageSync('searchData', searchData)

    //读取用户搜索商品
    var name = this.data.inputValue
    wx.request({
     url: 'www.shop.com/home/product/search',
     data: {name:name},
     method: 'GET', 
     success: function(res){
        that.setData({
        goodsList: res.data.info,
      })
     },
    })
  }
}

 流程这么走:

1.用户输入数据,点击搜索

2.如果数据不为空,加入(设置)本地缓存

3.去服务器搜索用户想要的数据,赋值给这个页面的变量

4.点击删除,去除本地这个key的value

这里的缓存形式的  key=>value

var searchData = wx.getStorageSync('searchData') || []

获取本地名字为'searchData'的缓存,如果'searchData'这个缓存不存在就相当于重新什么一个空数组,赋值给searchData这个变量

searchData.push(this.data.inputValue)

将用户输入的值PUSH进searchData这个变量里

wx.setStorageSync('searchData', searchData)

调用API接口,重新设置key = 'searchData'的这个缓存的value等于searchData

下面的wx.request是请求数据的内容,说腻了,印象够深了。

这里没有绑定获取缓存的bindtap,只要获取到,然后添加到Page里面的data

//从本地获取历史搜索数据

     var searchData = wx.getStorageSync('searchData')||[]

      this.setData({

        searchData:searchData

      })

 

deleteHistory

//删除历史搜索数据

  deleteHistory:function(){

    var that = this

    wx.showModal({

    title: '提示',

    content: '是否删除历史搜索',

    success: function(res) {

      if (res.confirm) {

        wx.setStorageSync('searchData', []);

        wx.switchTab({

          url: '/pages/index/index',

        })

       }

      }

    })

}

这里是将'searchData'这个key的缓存的value为空数组,而不是使用API提供的wx.clearStorageSync,这个会清除其他的所有缓存,而我只是想清除这一个key的缓存

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
网页里控制图片大小的相关代码
Jun 25 Javascript
完美解决JS中汉字显示乱码问题(已解决)
Dec 27 Javascript
Javascript下判断是否为闰年的Datetime包
Oct 26 Javascript
jquery 按键盘上的enter事件
May 11 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
浅谈JavaScript的push(),pop(),concat()方法
Jun 03 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 Javascript
利用JavaScript如何查询某个值是否数组内
Jul 30 Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 Javascript
Vue打包后访问静态资源路径问题
Nov 08 Javascript
Nest.js参数校验和自定义返回数据格式详解
Mar 29 Javascript
详谈JavaScript的闭包及应用
Jan 17 #Javascript
用原生js做单页应用
Jan 17 #Javascript
js cookie实现记住密码功能
Jan 17 #Javascript
angularjs ocLazyLoad分步加载js文件实例
Jan 17 #Javascript
微信小程序 登陆流程详细介绍
Jan 17 #Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 #Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 #Javascript
You might like
PHP初学者头疼问题总结
2006/07/08 PHP
PHP开发大型项目的一点经验
2006/10/09 PHP
PHP教程 基本语法
2009/10/23 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
php递归json类实例
2014/12/02 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
js实现选项卡效果
2020/03/07 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
进一步理解Python中的函数编程
2015/04/13 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python实现的字典值比较功能示例
2018/01/08 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Python绘制数码晶体管日期
2021/02/19 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
市场营销专业个人求职信范文
2013/12/14 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
数学教师个人总结
2015/02/06 职场文书
预备党员转正意见
2015/06/01 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python
python 中的@运算符使用
2021/05/26 Python