使用JS实现前端缓存

使用JS实现前端缓存

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

具体实现思路和方法:

创建一个cache.js文件:

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


* 定义需要在用户登录的时候获取到本地的数据字典类别

*/varclsCodes = {clsCodes :

        [BOOL,

        STATUS,

        USER_TYPE,

        REPORT_STATUS

    ]

};

/**

* 获取数据字典到本地

*/vardicts;```

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、定义一个接口,根据前端的请求,查询[数据库](http://www.2cto.com/database/)(或查询服务器缓存,如下面例子中)获取数据返回给前端:

```/**

* 根据多个分类编号获取多个字典集合

* @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> dictCache = (Map>) CacheManager.getInstance().get(CacheConstants.DICT);

    Map dictMap =newLinkedHashMap<>();//使用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;

}```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,612评论 8 265
  • 故事,发生在三年前,我们相遇在国内的一家培训中心,大家为各自的工作,学习忙碌着,一场面试,把我们带到了国外的一家医...
    Lisa龙阅读 174评论 0 1
  • 没有白色颜料,画不出水纹
    舞乐动婷阅读 209评论 0 1
  • Controls UIControl是所有控件的基类,定义通用方法;控件允许用户与应用交互、修改应用内容、以简单的...
    linatan阅读 2,467评论 1 1