前端缓存处理[通俗易懂]

前端缓存处理[通俗易懂]前端的缓存原来是这样做的!

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

前端缓存处理

在开发过程中,总有一些使用频率很高的接口,数据内容还不基本不修改的数据。为了提高效率,自然要放到缓存中。

后端将数据放入redis,那么前端放到哪呢?

通常的选择是localStorage、sessionStorage中。

1.前端的缓存位置区别:

简单说明,详细区别可自行百度。

localStorage: 永久保存,浏览器关闭也不会消失。除非手动清除数据。

sessionStorage:暂时保存,缓存的数据时间是会话级别的。不会永久保存。

2.js工具类代码:

/** * 根据字典编码获取字典数据 * 注意:此方法是异步方法,需要用.then(res => {})获取返回值 * @param {string} code 字典编码 * @returns 字典数据 */
async getCodeList(code) { 
   
  let codeList = sessionStorage.getItem(code);
  // 校验这个数据是否可用
  if (StringUtil.isEmpty(codeList)) { 
   
    // 此处同步调用接口,是防止方法已经结束了,但是数据还没获取到。(这里使用await,方法就必须是async修饰的)
    await sysCode.itemCodes({ 
   code: code}).then((res) => { 
   
      // 存数据时都需要用JSON进行转换。
      sessionStorage.setItem(code, JSON.stringify(res));
      codeList = JSON.stringify(res);
    })
  }
  return JSON.parse(codeList);
},

/** * 根据字典编码和字典数据的id获取该字典数据的名称 * 注意:调用此方法的位置要确保当前系统已经调用过同文件中的getCodeList方法,并且code一致 * @param {string} code 字典编码 * @param {number} id 字典数据的id * @returns {String} 字典数据的名称 */
getCodeName(code, id) { 
   
  id = parseInt(id);
  let codeList = sessionStorage.getItem(code);
  return JSON.parse(codeList).filter(e => e.valueId === id)[0].valueName;
},

Jetbrains全家桶1年46,售后保障稳定

3.页面中的使用:

/** * 获取下拉框数据 */
select() { 
   
  // 异步方法需要使用.then()获取数据
  sysCodeUtil.getCodeList("type").then(res => { 
   
    this.type = res;
  })
},

// 此处粘一行代码说明getCodeName的使用
res.data.type = sysCodeUtil.getCodeName("type", res.data.type);

使用时根据具体使用环境具体选择放到sessionStorage中还是localStorage中,我这里是放到了sessionStorage中。

我是做java的,js并不是非常熟悉,把这个方案想出来用了一两天的时间。

最开始没有这个方法并没有加异步,写完了这个工具类之后发现系统第一次调用的时候,方法已经结束了但是没有获取到值。

sessionStorage中也有值,就是返回值没有数据。后来发现是调用接口的时候异步执行,方法结束后才会调用接口。(最开始不太明白js的异步执行规则,后来才知道的)

加上异步之后就可以解决这个问题了,调用的时候会把数据获取到再返回。

我这里是这样做的,我感觉不是最优解,但是我只想到了这种方式,有大佬有更好的方式欢迎在评论区评论!

有什么问题,也欢迎在评论区留言!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206690.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 云存储及分布式文件系统

    云存储及分布式文件系统云存储是云计算中有关数据存储、归档、备份的一部分。存储技术从磁带发展到磁盘、再从磁盘发展到阵列、从阵列发展到网络存储。随着集群技术、网格技术、分布式存储技术、虚拟化存储技术的发展,进入了云存储的时代。以网盘为代表就是云存储的一种表现形式,实现用户文件数据存储至网络,达到存储、备份、使用、共享和保护的目的。

  • json字符串转换成对象有哪几种方法_jsonstring转对象

    json字符串转换成对象有哪几种方法_jsonstring转对象1.将json字符串转化为json对象a.方案一:jquery自带的$.parseJSON函数<script>varjsonstr="{\"id\":\"1\",\"name\":\"jack\"}";varobj=$.parseJSON(jsonstr);&a

  • Mybatis RowBounds 分页原理「建议收藏」

    Mybatis RowBounds 分页原理「建议收藏」在mybatis中,使用RowBounds进行分页,非常方便,不需要在sql语句中写limit,即可完成分页功能。但是由于它是在sql查询出所有结果的基础上截取数据的,所以在数据量大的sql中并不适用,它更适合在返回数据结果较少的查询中使用最核心的是在mapper接口层,传参时传入RowBounds(intoffset,intlimit)对象,即可完成分页注意:由于java允许的最大整数为2147483647,所以limit能使用的最大整数也是214748…

  • Java进阶(二十三)java中long类型转换为int类型

    Java进阶(二十三)java中long类型转换为int类型java中long类型转换为int类型由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况:主要以下几种转换方法,供参考:一、强制类型转换[java]longll=300000;intii=(int)ll;二、调用intValue()方法[j

  • 深入浅出TCP三次握手 (多图详解)[通俗易懂]

    深入浅出TCP三次握手 (多图详解)[通俗易懂]文章目录前言1、TCP是什么?2、TCP首部格式3、TCP的连接建立4、三次握手图文详解5、三次握手文字总结5、是否可以使用“两报文握手”建立连接?6、两次握手文字总结前言TCP三次握手和四次挥手是面试题的热门考点,它们分别对应TCP的连接和释放过程,今天我们先来认识一下TCP三次握手过程,以及是否可以使用“两报文握手”建立连接?。1、TCP是什么?TCP是面向连接的协议,它基于运输连接来传送TCP报文段,TCP运输连接的建立和释放,是每一次面向连接的通信中必不可少的过程。TCP运输连接有以下

  • ThinkPHP 小于5.0.24 远程代码执行高危漏洞 修复方案

    ThinkPHP 小于5.0.24 远程代码执行高危漏洞 修复方案

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号