使用JS实现前端缓存

在前端浏览器中,有些数据(比如数据字典中的数据),可以在第一次请求的时候全部拿过来保存在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, 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;
	}

(关于服务器端的缓存,有多种实现方法,其中的一种guava缓存可以参考:http://blog.csdn.net/clementad/article/details/46491701

(原创文章,转载请注明转自Clement-Xu的博客)

版权声明:本文为原创文章,转载请注明转自Clement-Xu的csdn博客。

时间: 2024-12-19 21:56:03

使用JS实现前端缓存的相关文章

HTML编程之如何使用JS实现前端缓存

在前端浏览器中,有些数据(比如数据字典中的数据),可以在第一次请求的时候全部拿过来保存在js对象中,以后需要的时候就不用每次都去请求服务器了.对于那些大量使用数据字典来填充下拉框的页面,这种方法可以极大地减少对服务器的访问.因此这种方法特别适用于使用iframe的框架. 具体实现思路和方法如下: 创建一个cache.js文件: 1.前端页面,定义那些数据需要一次性拿到前端缓存,定义一个对象来保存这些数据: /** * 定义需要在用户登录的时候获取到本地的数据字典类别 */ var clsCode

【js】了解前端缓存,收获不止于此!

了解前端缓存,收获不止于此! 这次我们来讲一下关于前端缓存的问题.感谢赵欢同学提供doc素材. 首先,开局我画了一张图,你会对文章有一个大局了解. 今天讲的是前端缓存. 前端缓存有3大种:如图,分为HTTP缓存.浏览器缓存.应用程序缓存. HTTP缓存 我们先来看HTTP缓存:(做下了解) 分为强缓存与协商缓存. 首先看强缓存: 强缓存之Expires: 值为服务端返回的到期时间,即下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据: 到期时间是由服务端生成的,客户端时间跟服务端时

ahjesus 前端缓存原理 转载

LAMP缓存图 从图中我们可以看到网站缓存主要分为五部分 服务器缓存:主要是基于web反向代理的静态服务器nginx和squid,还有apache2的mod_proxy和mod_cache模 浏览器缓存:包括页面html缓存和图片js,css等资源的缓存 PHP缓存:有很多免费的PHP缓冲加速工具,如apc eaccerlertor等 内存缓存:主要是采用memcache这种分布式缓存机制 数据库缓存:通过配置数据库缓存,以及数据存储过程,连接池技术等 下面重点介绍浏览器缓存原理: 从上图:我们

使用Memcached、Spring AOP构建数据库前端缓存框架

数据库访问可能是很多网站的瓶颈.动不动就连接池耗尽.内存溢出等.前面已经讲到如果我们的网站是一个分布式的大型站点,那么使用 memcached实现数据库的前端缓存是个很不错的选择:但如果网站本身足够小只有一个服务器,甚至是vps的那种,不推荐使用memcached,使 用Hibernate或者Mybatis框架自带的缓存系统就行了. 一.开启memcached服务器端服务 如果已经安装了memcached服务器端程序,请确认服务器端服务已开启. 二.引入jar 1.  alisoft-xplat

使用 node.js 开发前端打包程序 ---转载

我们在做前端开发的时候经常会在部署上线的时候做程序的打包和合并,我们接下来就会对如何使用 node.js 开发前端打包程序做非常深入的讲解,希望能够帮到有需要的同学. 我们现在做前端开发更多的是多人共同协作开发,每个人负责不同的模块,便于开发和调试.这样就导致我们最后部署上线的时候需要把所有人开发的模块进行合并,生成单个或多个文件上线.如果手动合并的话肯定是费时又费力,而且非常容易出错,所以我们一般都是通过一些工具来实现自动合并的功能. 打包程序的原理非常简单,入口文件->寻找依赖关系->替换

JS高级前端开发群加群说明

JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这样的成绩或这样一个结果也是情理之中,一方面来说,提倡的各种交流沟通方法大部分是正确有效或被大家认可的,另外一方面说,这么多人聚在一起,跟大伙的参与分享是分不开的,尤其是各群的管理,是我们的灵魂精神的支柱.另外在国内行业前进的道路上,尽自己的绵薄之力帮助他人,引领氛围,进而影响行业,也是略感欣慰.有时候精

【php】基于Redis的js、css缓存类

<?php /* *基于Redis的js.css缓存类(有效解决tp等框架访问public出现的各种问题) *Written by Radish 2015.8.16 */ define('REDIS_HOST', '127.0.0.1'); define('REDIS_PORT', 6379); // class im { function __construct() { $this->redis = new Redis(); $this->redis->connect(REDIS

关于更新发布CSS和JS文件的缓存问题

在Web应用程序大行天下的今天,我们程序员的工作大都基于B/S架构,B/S架构的优势就在于可以及时(甚至随时)更新页面以及后台逻辑,而不用通知客户去手动更新客户端.在这种环境下,是不是B/S架构的软件就真的没有升级的问题了呢? 现如今,浏览器大战下,各个浏览器也是拼了命的提高性能,升级JS解析引擎,更好的处理浏览器的页面缓存,让用户的浏览体验更快,占用更小的PC资源.那么,问题就出现在JS和CSS缓存,甚至页面缓存上.至于浏览器对页面的缓存,我们一般通过在服务端发送页面的时候设置页面的生存期,一

Memcached与Spring AOP构建数分布式据库前端缓存框架

由于上一篇有介绍了Memcached缓存,并集群部署,这边我们就不介绍,我们直接介绍Memcached与Spring AOP构建分布式数据库前端缓存框架 一.Java 实现Memcached客户端,实现分布式 (1)需要的jar 1)commons-pool-1.5.6.jar 2)java_memcached-release_2.6.3.jar 3)slf4j-api-1.6.1.jar 4)slf4j-simple-1.6.1.jar (2)Java 实现Memcached客户端代码如下: