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 鼠标滚轮事件
Apr 09 Javascript
面向对象的编程思想在javascript中的运用上部
Nov 20 Javascript
IE8 中使用加速器(Activities)
May 14 Javascript
Javascript的各种节点操作实例演示代码
Jun 27 Javascript
js下拉框二级关联菜单效果代码具体实现
Aug 03 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
jquery专业的导航菜单特效代码分享
Aug 29 Javascript
jQuery实现简单的文件上传进度条效果
Mar 26 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 Javascript
Vue.js下拉菜单组件使用方法详解
Oct 19 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
Mar 03 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获取中英混合字符串长度的方法
2014/06/07 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
javascript 面向对象的JavaScript类
2010/05/04 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
Python守护线程用法实例
2017/06/23 Python
Python实现登陆文件验证方法
2018/10/06 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
python多任务之协程的使用详解
2019/08/26 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
Django实现内容缓存实例方法
2020/06/30 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
为什么group by 和order by会使查询变慢
2014/05/16 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
幼儿园班级工作总结2015
2015/05/25 职场文书
交通安全教育主题班会
2015/08/12 职场文书
php字符串倒叙
2021/04/01 PHP