【微信_小程序】1.同步方法与异步方法的对比

在微信小程序的开发中,缓存会用到以下的几个方法,分别对应一个同步和异步的方法,最大上限是10MB。javascript

//同步缓存存取
wx.setStorageSync('key','风暴英雄');
wx.getStorageSync('key');

//异步缓存存取
wx.setStorage('key','风暴英雄');
wx.getStorage('key');

//清除缓存
wx.removeStorageSync('key');
wx.removeStorage('key');

//清除全部缓存,不须要传参数
wx.clearStorageSync();
wx.clearStorageSync();
在涉及到缓存的时候,通常咱们建议用同步的写法,异步的写法实际上是一种很是危险的写法,第一点,它会让代码变得难以阅读,第二点,它会引发许多未知的错误,若是对异步的方法不是很熟悉,建议能用同步就用同步,千万不要用异步,固然小程序里面有些状况是必须用异步的,可是在小程序里面用到异步的状况会很是的少,同步的缺陷是什么呢?方法执行很慢的时候整个UI会卡住,同步的方法运行不过去,后面的方法就走不了,因此呢,代码的耗时就会很是长,这是同步的缺点。那么异步的好处呢,代码会马上走完,而后获取到缓存之后,由框架再去调用success,整个流程会很快的走完,不会让UI有停滞的效果,这是异步的一个优点。下面是一段同步和异步的代码的写法:

//异步方法
  getPostsCollectedAsy:function(){
    wx.getStorage({
      key: 'posts_collected',
      success:function(res){
        var postsCollected = res.data;
        var postCollected = postsCollected[this.data.currentPostId];
        //收藏变成未收藏,未收藏变成收藏
        postCollected = !postCollected;
        postsCollected[this.data.currentPostId] = postCollected;
        // this.showModal(postsCollected, postCollected);
        this.showToast(postsCollected, postCollected);
      }
    });
  },
  //同步方法
  getPostsCollectedSyc:function(){
    // wx.removeStorageSync('posts_collected');
    var postsCollected = wx.getStorageSync('posts_collected');
    var postCollected = postsCollected[this.data.currentPostId];
    //收藏变成未收藏,未收藏变成收藏
    postCollected = !postCollected;
    postsCollected[this.data.currentPostId] = postCollected;
    // this.showModal(postsCollected, postCollected);
    this.showToast(postsCollected, postCollected);
  },
通常建议该用同步的时候就要用同步,同步解决不了的问题再用异步,咱们都知道异步方法的调试有点困难,这也是咱们不建议用异步的缘由。固然这个也要根据本身的业务来进行判断看是否用同步仍是异步,当你的业务须要解耦的状况下,去使用异步,当你的业务是同步的话,那就最好仍是使用同步,也就是说异步的操做是须要业务的配合来设计的,举个例子,咱们常常在京东上购物,那么当你购物的时候提交了一个订单,实际上来讲这个订单呢,它的执行状况并非马上返回给你的,这个时候京东的后台是怎么作的呢,它首先是把你这个订单提交到了后台服务器的一个任务队列里,而后这个订单并不会立刻被执行,而是根据队列的状况,一个订单一个订单的进行处理,而后等到你的订单处理完成之后呢,京东呢会给你发一条通知,这个就是在业务上契合异步的操做,它实现了一个松耦合的一个效果,它这样作的目的也就减小服务器的并发压力。你们可能会有疑问,说在京东购物完之后,京东确实马上发了一个消息说订单提交成功,可是这个订单提交成功,并非你的订单马上就处理完了,而是你的订单已经加入了这个任务队列,而真实的订单处理后续会有一个至关复杂的操做过程,好比说订单的分库,出库,可能还要分包,装包,装箱,这样一些复杂的流程不可能说让你一直在这里等着消息的回馈,它必须是经过这样的异步解耦先告诉你你的订单提交成功了,而后当处理完之后再经过消息这样异步的方式告诉你,你的订单的一个状态,必须是这样的一个流程不然这个用户体验就太差了,服务器也承受不了这样的压力,举这个例子呢,也是为了说一下何时用异步这样一个经验性的东西。异步的选择,你必定要先明确本身的一个业务的需求,再来讨论是选择异步还同步,脱离了业务讨论同步和异步,这个其实是没有多大意义的,上面同步和异步的代码只是简单的存取key-value的值,这个彻底没有必要用异步,举个极端的例子,小程序的缓存上限是10MB,你试想一会儿提取10MB的数据出来,会是什么样的状况,那这个时候你就要考虑异步的状况了。由于它整个的过程有可能很慢,给用户的体验也很是很差,可是我以为这一种状况应该很是少。