JS实现前端缓存的方法


Posted in Javascript onSeptember 21, 2017

在前端浏览器中,有些数据(比如数据字典中的数据),可以在第一次请求的时候全部拿过来保存在js对象中,以后需要的时候就不用每次都去请求服务器了。对于那些大量使用数据字典来填充下拉框的页面,这种方法可以极大地减少对服务器的访问。这种方法特别适用于使用iframe的框架。

具体实现思路和方法:

创建一个cache.js文件:

1、前端页面,定义那些数据需要一次性拿到前端缓存,定义一个对象来保存这些数据:

/**
 * 定义需要在用户登录的时候获取到本地的数据字典类别
 */
var clsCodes = {clsCodes :
    [BOOL,
     STATUS,
     USER_TYPE,
     REPORT_STATUS
   ]
};
 
/**
 * 获取数据字典到本地
 */
var dicts;

2、前端页面,定义一个函数来调用后台接口获取数据,然后保存到本地缓存对象(dicts)中。

function getDicts() {
  $.post(getContextPath() + /api/sys/getDictList,
      clsCodes,
      function(resultBean, status, xhRequest) {
        if (resultBean.data != undefined) {
          dicts = resultBean.data;
        }
      }, 
      'json');
}

在主页面加载的时候调用这个方法一次性获取数据并缓存起来。这样,以后需要同样的数据,就直接从本地对象dicts中获取了。

后端Controller:

3、定义一个接口,根据前端的请求,查询数据库(或查询服务器缓存,如下面例子中)获取数据返回给前端:

/**
 * 根据多个分类编号获取多个字典集合
 * @param clsCodes
 * @return {{clsCode : {code1:name1,code2:name2...}}, ...}
 */
@SuppressWarnings({ unchecked, rawtypes })
@ResponseBody
@RequestMapping(getDictList)
public ResultBean getDictList(@RequestParam(value = clsCodes[], required = true) String[] clsCodes) {
  ResultBean rb = new ResultBean();
   
  Map<string, string="">> dictCache = (Map<string, string="">>) CacheManager.getInstance().get(CacheConstants.DICT);
  Map dictMap = new LinkedHashMap<>(); //使用LinkedHashMap保证顺序
 
  if(dictCache != null){
    for(String clsCode: clsCodes){
      dictMap.put(clsCode, dictCache.get(clsCode));
    }
  }else{
    rb.setMessage(缓存中拿不到字典信息!);
    rb.setSuccess(false);
  }
 
  rb.setData(dictMap);
  return rb;
}</string,></string,>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 原型模式实现OOP的再研究
Apr 09 Javascript
javascript 无提示关闭窗口脚本
Aug 17 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
Jul 16 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
浅谈jQuery添加的HTML,JS失效的问题
Oct 05 Javascript
AngularJS折叠菜单实现方法示例
May 18 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
vue-router懒加载速度缓慢问题及解决方法
Nov 25 Javascript
使用Node.js在深度学习中做图片预处理的方法
Sep 18 Javascript
利用JS代码自动删除稿件的普通弹幕功能
Sep 20 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 Javascript
JS基于正则表达式实现的密码强度验证功能示例
Sep 21 #Javascript
jQuery实现的简单动态添加、删除表格功能示例
Sep 21 #jQuery
详解react服务端渲染(同构)的方法
Sep 21 #Javascript
详解node单线程实现高并发原理与node异步I/O
Sep 21 #Javascript
删除table表格行的实例讲解
Sep 21 #Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 #Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 #Javascript
You might like
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
深入了解Django View(视图系统)
2019/07/23 Python
python实现邮件自动发送
2019/08/10 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python中内建模块collections如何使用
2020/05/27 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
后勤主管工作职责
2013/12/07 职场文书
培训讲师邀请函
2014/01/10 职场文书
银行员工职业规划范文
2014/01/21 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS
python字典的元素访问实例详解
2021/07/21 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis