美文网首页
使用JS实现前端缓存

使用JS实现前端缓存

作者: 暮雨默默 | 来源:发表于2018-11-29 14:59 被阅读0次

    使用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;
    
    }```
    

    相关文章

      网友评论

          本文标题:使用JS实现前端缓存

          本文链接:https://www.haomeiwen.com/subject/zlkfcqtx.html