美文网首页
http缓存,普通对象缓存

http缓存,普通对象缓存

作者: 前端人 | 来源:发表于2022-04-27 17:22 被阅读0次

这里说的http缓存是指在前端同时发起很多api和参数都相同的get请求,特别是在map for 循环里,一个组件被循环多次,它里面的接口也会多次重复请求,那么在短时间内多次发重复请求 肯定是性能不友好的,所以我做了一个缓存,代码如下


/**做得默认6s缓存 */
class CacheHttp {
  time = 6 * 1000;

  retPromiseMap = new Map();

  http(api, param, httpInstance) {
    const key = getHash(api + JSON.stringify(param));

    const cacheData = this.retPromiseMap.get(key);
    const setPromise = () => {
      //发出真实的http请求,缓存promise 用map储存 下一次用
      let ret = httpInstance(api, param);
      const temp = {
        startTime: new Date().getTime(),
        retPromise: ret,
        isFinish: false, //记录promise是否已经是完成状态了 如果是完成状态 就要重新发请求
      };
      ret &&
        ret.finally(() => {
          temp.isFinish = true;
        });
      this.retPromiseMap.set(key, temp);

      return ret;
    };
    //说明还没有缓存过
    if (!cacheData) {
      return setPromise();
    }
    if (new Date().getTime() - cacheData.startTime <= this.time && cacheData.isFinish === false) {
      console.log('http缓存发生作用');
      return cacheData.retPromise;
    } else {
      //说明缓存过期了
      return setPromise();
    }
  }
}

function getHash(str) {
  var hash = 0,
    i,
    chr;
  if (str.length === 0) return hash;
  for (i = 0; i < str.length; i++) {
    chr = str.charCodeAt(i);
    hash = (hash << 5) - hash + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
}

下面是使用举例

const cacheHttp = new CacheHttp();
   cacheHttp.http(Apis.findSubNavList, { current: 1, pageSize: 1000, ...param }, httpGet).then((res) => {
   
    });

相关文章

  • http缓存,普通对象缓存

    这里说的http缓存是指在前端同时发起很多api和参数都相同的get请求,特别是在map for 循环里,一个组件...

  • HTTP缓存原理

    什么是HTTP缓存 HTTP缓存通常指浏览器缓存,基于HTTP中header字段实现HTTP缓存分为强缓存和协商缓...

  • 前端缓存

    前端缓存 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • http缓存和各个版本差异理解

    http缓存我们可以通过设置http头部属性来对资源进行缓存,资源缓存分为强制缓存和协商缓存 强制缓存expire...

  • x-particles4.0(071)cash缓存

    缓存对象用于缓存X-Particles系统。 缓存数据保存在每个已缓存对象的标签中。如果需要,这使从缓存中排除对象...

  • 前端缓存详解

    一、前言 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • 前端缓存的理解 或者 前端数据持久化的理解(强制缓存、协商缓存)

    前端缓存分为HTTP缓存和浏览器缓存 其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而...

  • HTTP缓存机制

    HTTP缓存机制 前言 ​ 缓存机制无处不在,有客户端缓存,服务端缓存,代理服务器缓存等。在HTTP中具有缓存...

  • PWA笔记一:Web的万物基础缓存

    前言 这里讨论的缓存包括两种,一种是HTTP缓存,一种是Service Worker缓存。 HTTP缓存 HTTP...

  • 一文读懂http缓存(超详细)

    前端缓存 前端缓存可分为两大类:http缓存和浏览器缓存。我们今天重点讲的是http缓存,所以关于浏览器缓存大家自...

网友评论

      本文标题:http缓存,普通对象缓存

      本文链接:https://www.haomeiwen.com/subject/fhjlyrtx.html