前端性能优化-微信小程序的storage缓存请求数据

前言

微信小程序的storage缓存是用于在用户设备上存储数据的机制,它有10MB的最大限制。其特点和使用方法如下:

  1. 用户数据隔离:微信用户的每个小程序都有独立的storage空间,同一个微信用户的不同小程序之间,以及不同用户之间,无法互相访问对方的数据。
  2. 数据存储形式:数据以键值对的形式存储,其中单个键允许存储的最大数据长度为1MB,所有数据加起来的存储空间上限为10MB。
  3. 数据操作方法:可以使用wx.setStorage(或wx.setStorageSync)来设置或存储数据,使用wx.getStorage(或wx.getStorageSync)来获取数据,使用wx.clearStorage(或wx.clearStorageSync)来清理数据。
  4. 异步与同步wx.setStoragewx.getStorage是异步的,它们不会阻塞程序的执行,而wx.setStorageSyncwx.getStorageSync是同步的,会直接返回结果。
  5. 插件隔离策略:如果一个小程序使用了多个插件,这些插件之间的storage是不互通的,插件与小程序本身的storage也是隔离的。

微信小程序的storage缓存提供了一种方便的数据存储方式,但需要注意其存储限制和隔离策略,以确保数据的正确使用和管理。


通常,无论是web端,还是小程序,请求页面数据都是一打开就去发起

vue中:created方法中直接调用请求方法

微信小程序中:onLoad: function () {} 方法中直接调用请求方法

也就是说,在页面创建的一瞬间,就发送请求给后端,用户每次新打开这个页面,就会发送请求,如果请求返回的数据量小还好,以当今的网络不会有什么感觉,但是如果返回的数据量很大,有好几百kb之类的,那就要考虑数据缓存优化了,不然用户反复请求造成资源浪费、卡顿,体验非常不好。

在控制台中查看请求返回的数据量大小

 storage缓存数据

 当页面创建时,不要直接发送请求,而是先通过获取storage中的缓存,再决定是否重新发起请求

/**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取当前页面数据
    //  1 获取本地存储中的数据  (小程序中也是存在本地存储 技术)
    const Cates = wx.getStorageSync("cates");
    // 2 判断==》如果没有存储过,则表示没有还没有请求过
    if (!Cates) {
      // 直接发送请求获取数据
      this.getCates();
    } else {  //storage中有数据,表示请求过
      // 有旧的数据 根据定义过期时间去判断是否过期 ===》 超过一定时间后才允许再次请求
      //? Date.now() ==》得到当前时间的【毫秒数】时间戳   可进行加减,进行比较
      //! 计算得到已经过了 10秒了 那就可以重新发起请求了
      if (Date.now() - Cates.time > 1000 * 10) {
        // 重新发送请求
        this.getCates();
      } else {  //还没过期,那就使用storage中存储的数据
        // 可以使用storage中旧的数据,不发送请求,节约资源
        this.data.Cates = Cates.data;
        
      }
    }
  },

发送请求成功后,需要将数据与时间戳一起存入storage中,用于 onLoad 中 进行判断是否过期

  // 页面获取数据的方法
  getCates () {
   //封装的wx请求方法,避免回调地狱
    cjRequest({
      url: "xxxxx"
    })
      .then(res => {
        console.log(res);
        this.data.Cates = res.data;
        /**
         *把接口的数据存入到本地Storage存储中
          通过加入time字段,用于进行判断数据请求的间隔(数据是否过期)
           ==》进而决定是否重新发起请求再次获取数据,减小损耗
        */
        wx.setStorageSync("cates", {
          // Date.now() ==》得到当前时间的【毫秒数】时间戳,用于后续判断是否过期
          time: Date.now(),
          // 将请求返回的数据
          data: this.Cates
        });
      })
  },

至此,就实现了前端数据缓存,至于过期的时间可以自行设置,这里是10s


 博主 [DTcode7] 带您 溺亖在知识的海洋里,嘿嘿嘿.~
🐒 个人主页—— DTcode7 的博客🐒

《微信小程序相关博客》
《Vue相关博客》
《前端开发习惯与小技巧相关博客》
《AIGC相关博客》

《photoshop相关博客》
😚 吾辈才疏学浅,摹写之作,恐有瑕疵。望诸君海涵赐教。望轻喷,嘤嘤嘤 🙈
🕍 愿斯文对汝有所裨益,纵其简陋未及渊博,亦足以略尽绵薄之力。倘若尚存阙漏,敬请不吝斧正,俾便精进!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DTcode7

你的鼓励是我坚持的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值