视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript如何实现前端缓存
2020-11-27 19:52:46 责编:小采
文档

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

具体实现思路和方法:

创建一个cache.js文件:

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

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

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

  1. 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, Map<String, String>> dictCache = (Map<String, 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; 
}


相关推荐:

下载本文
显示全文
专题