前端接口缓存实践

一、灵感来源

本周线上不止一次因为地域接口请求时间过长导致选择器选项空白情况,为此重新制定了一套方案。

原:地域请求获取全部的地域信息,比如一次性获取一棵省、市、区全部信息的地域树。
现:地域请求根据父id获取子数组信息,比如传省id获取该省下的全部的市数据

改成新的方案后,我发现每次进入某些页面时需要加载3、4个地域接口,并且会一直重复加载,然而地域数据更新的频率很低,于是我就想如果用数据缓存替代接口请求是不是也可以?

二、方案实践

1、流程图
缓存流程图
2、详情代码

// 封装到hooks中

// 封装的请求
import { http } from '../serve/qzf-http';
// 缓存
const villagesMap = new Map();
// 最大缓存时间
const maxVillagesTime = 1000 * 60 * 10;

// 分片请求地域加上缓存
export const initCacheVillages = (townId) => {
  return new Promise((resolve, reject) => {
    if (villagesMap.has('time') && Date.now() - villagesMap.get('time') > maxVillagesTime) {
      villagesMap.clear();
    }
    if (villagesMap.has(townId)) {
      // 命中
      resolve(villagesMap.get(townId));
    } else {
      // 未命中
      http
        .get(`xxxx?regionId=${townId}`)
        .then((v) => {
          const villages = v.data.payload;
          villagesMap.set(townId, villages);
          villagesMap.set('time', Date.now());
          resolve(villages);
        })
        .catch((err) => {
          reject(err);
        });
    }
  });
};

三、小结

在这里插入图片描述

在这里插入图片描述

加入缓存后,在缓存过期之前不会重复发起一样的请求。

前端性能优化涉及到很多方面,其中一条为减少http/https请求,前端缓存接口数据,在针对数据修改频率较低的场景中极为有效。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于前后端分离的移动端接口设计,可以考虑以下几点: 1. 使用 RESTful API:RESTful 是一种基于 HTTP 协议设计的 API 架构风格,它可以帮助我们设计清晰、简洁、易于扩展的接口。在移动端开发中,RESTful API 可以通过 HTTP 请求响应数据,实现前后端之间的数据交互。 2. 采用 JSON 数据格式:JSON 是一种轻量级的数据交换格式,在移动端开发中广泛使用。它具有简洁、易于读写、易于解析等特点,可以很好地满足移动端接口的需求。 3. 接口版本管理:由于移动端应用的开发周期较长,应用版本更新频繁,因此在接口设计中需要考虑版本管理。可以在接口 URL 中添加版本号,例如 /api/v1/login,这样可以避免因接口变更导致的应用崩溃等问题。 4. 接口安全认证:移动端应用中的接口需要进行安全认证,以保护用户数据的安全。可以采用 token 或 OAuth2 等方式进行认证,确保只有授权的用户才能访问接口。 5. 接口文档管理:为了方便前端开发人员开发和测试接口,需要提供详细的接口文档。可以采用 Swagger 等工具自动生成接口文档,避免手动编写文档的繁琐。 6. 接口性能优化:移动端应用的网络环境相对不稳定,因此需要对接口进行性能优化。可以采用缓存、分页、懒加载等方式提升接口响应速度,减少用户等待时间。 以上是前后端分离的移动端接口设计的一些注意点,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值