功能概述:
- 前端项目中有同一接口重复触发的并发现象
- 一些公共数据接口,如用户信息,配置信息等接口需要多次获取
- 首页有大量重复请求影响启动时间
适用条件:
- 基本的公共数据和用户信息
- get类获取数据接口
- 基本原则就是缓存不更新或者更新周期较长的数据
大体思路:
- 初次请求时将接口promise缓存到map对象中,map中的key名使用api名+参数拼接;下一次请求到同一key名的接口直接返回缓存中的promise;如果没有此key的promise使用正常的接口请求;
需求功能:
- 同一个接口,需要区分参数进行存储接口名+参数,生成唯一字符串
- 支持异步接口请求
- 支持promise
- 考虑并发的情况,同一接口同时触发的情况
- 默认关闭缓存,通过接口参数设置单独开启缓存
- 支持设置有效期,过期主动清除,取代惰性删除可能引起的内存溢出
实现代码:
class ItemCache {
constructor(promise, timeout) {
this.promise = promise
this.timeout = timeout
this.cacheTime = (new Date()).getTime()
}
}
class ExpriesCache {
static cacheMap = new Map()
static isOverTime(name) {
const promise = ExpriesCache.cacheMap.get(name)
if (!promise) return true
const currentTime = (new Date()).getTime()