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 相关文章推荐
jQuery.extend 函数详解
Feb 03 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 Javascript
jquery实现简单的轮换出现效果实例
Jul 23 Javascript
jquery实现滑动特效代码
Aug 10 Javascript
js实现简单排列组合的方法
Jan 27 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
详解在Vue中如何使用axios跨域访问数据
Jul 07 Javascript
iscroll.js滚动加载实例详解
Jul 18 Javascript
mint-ui在vue中的使用示例
Apr 05 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
原生JavaScript实现弹幕组件的示例代码
Oct 12 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 金额数字转换成英文
2010/05/06 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
vant实现购物车功能
2020/06/29 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
Python实现pdf文档转txt的方法示例
2018/01/19 Python
python获取交互式ssh shell的方法
2019/02/14 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python获取整个网页源码的方法
2020/08/03 Python
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
科研先进个人典型材料
2014/01/31 职场文书
初中生期末评语大全
2014/04/24 职场文书
求职简历自荐信
2014/06/18 职场文书
学校教师读书活动总结
2014/07/08 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
婚庆主持词大全
2015/06/30 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
网吧管理制度范本
2015/08/05 职场文书