【微信小程序】使用缓存技术优化代码

针对接口返回数据量大的问题,本文介绍了如何使用微信小程序的缓存技术进行优化。遵循存取规则,无需类型转换,将接口数据存入本地存储。在获取数据时,首先检查本地存储,如果没有旧数据或旧数据已过期(定义过期时间为5分钟),则发送新请求;否则使用本地存储的旧数据,提高用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用缓存技术优化代码
在这里插入图片描述
问题:接口的返回数据量太大了
解决:使用缓存技术优化
微信小程序官方文档:数据缓存
存:wx.setStorageSync(key, data) 取:wx.getStorageSync(key)
不存在类型转换的操作,存什么类型的数据进去,获取时就是什么类型

  • 0 把接口中的数据存入本地存储中 wx.setStorageSync(key, data)
  • 1 获取本地存储中的数据 wx.getStorageSync(key)
  • 2 判断本地存储中有没有旧数据
    • 2.1 没有旧数据-直接发送新请求获取数据
    • 2.2 有旧数据-判断旧数据是否过期
      定义过期时间 10s 改为 5min
      if (Date.now() - Cates.time > 1000 * 10)
      • 2.2.1 有旧数据但过期了-重新发送新请求获取数据
      • 2.2.2 有旧数据也没过期-使用本地存储中的旧数据

pages/category/category.js

import { request } from "../../request/request.js";
Page({
  data: {
    // 左侧的菜单数据
    leftMenuList: [],
    // 右侧的商品数据
    rightContent: [],
    // 被点击的左侧菜单
    currentIndex: 0,
    // 右侧内容的滚动条距离顶部的距离
    scrollTop: 0
  },
  
  // 接口的返回数据
  Cates: [],
  
  onLoad: function (options) {
    // 1.获取本地存储中的数据
    const Cates = wx.getStorageSync("cates");
    // 2.判断本地存储中有没有旧数据
    if (!Cates) {
      // 2.1 没有旧数据-直接发送新请求获取数据
      this.getCates();
    } else {
      // 2.2 有旧数据-判断旧数据是否过期
      // 定义过期时间 10s 改为 5min
      if (Date.now() - Cates.time > 1000 * 10) {
        // 2.2.1 有旧数据但过期了-重新发送新请求获取数据
        this.getCates();
      } else {
        // 2.2.2 有旧数据也没过期-使用本地存储中的旧数据
        this.Cates = Cates.data;
        let leftMenuList = this.Cates.map((v) => v.cat_name);
        let rightContent = this.Cates[0].children;
        this.setData({
          leftMenuList,
          rightContent,
        });
      }
    }
  },
  
  // 获取分类页面数据
  getCates() {
    request({
      url: "https://api-hmugo-web.itheima.net/api/public/v1/categories",
    }).then((result) => {
      this.Cates = result.data.message;
      // 把接口中的数据存入本地存储中
      wx.setStorageSync("cates", {
        time: Date.now(),
        data: this.Cates
      });
      // 构造左侧的菜单数据
      let leftMenuList = this.Cates.map((v) => v.cat_name);
      // 构造右侧的商品数据
      let rightContent = this.Cates[0].children;
      this.setData({
        leftMenuList,
        rightContent
      });
    });
  },
  
  // 左侧菜单的点击事件
  handleItemTap(e) {
    // 1.获取被点击的标题身上的索引
    const { index } = e.currentTarget.dataset;
    // 3.根据不同的索引渲染右侧内容
    let rightContent = this.Cates[index].children;
    // 2.给data中的currentIndex赋值
    this.setData({
      currentIndex: index,
      rightContent,
      // 重新设置右侧内容的滚动条距离顶部的距离
      scrollTop: 0
    });
  }  
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值