JS實(shí)現(xiàn)前端緩存的方法
在前端瀏覽器中,有些數(shù)據(jù)(比如數(shù)據(jù)字典中的數(shù)據(jù)),可以在第一次請(qǐng)求的時(shí)候全部拿過(guò)來(lái)保存在js對(duì)象中,以后需要的時(shí)候就不用每次都去請(qǐng)求服務(wù)器了。對(duì)于那些大量使用數(shù)據(jù)字典來(lái)填充下拉框的頁(yè)面,這種方法可以極大地減少對(duì)服務(wù)器的訪問(wèn)。這種方法特別適用于使用iframe的框架。
具體實(shí)現(xiàn)思路和方法:
創(chuàng)建一個(gè)cache.js文件:
1、前端頁(yè)面,定義那些數(shù)據(jù)需要一次性拿到前端緩存,定義一個(gè)對(duì)象來(lái)保存這些數(shù)據(jù):
/**
* 定義需要在用戶登錄的時(shí)候獲取到本地的數(shù)據(jù)字典類(lèi)別
*/
var clsCodes = {clsCodes :
[BOOL,
STATUS,
USER_TYPE,
REPORT_STATUS
]
};
/**
* 獲取數(shù)據(jù)字典到本地
*/
var dicts;
2、前端頁(yè)面,定義一個(gè)函數(shù)來(lái)調(diào)用后臺(tái)接口獲取數(shù)據(jù),然后保存到本地緩存對(duì)象(dicts)中。
function getDicts() {
$.post(getContextPath() + /api/sys/getDictList,
clsCodes,
function(resultBean, status, xhRequest) {
if (resultBean.data != undefined) {
dicts = resultBean.data;
}
},
'json');
}
在主頁(yè)面加載的時(shí)候調(diào)用這個(gè)方法一次性獲取數(shù)據(jù)并緩存起來(lái)。這樣,以后需要同樣的數(shù)據(jù),就直接從本地對(duì)象dicts中獲取了。
后端Controller:
3、定義一個(gè)接口,根據(jù)前端的請(qǐng)求,查詢數(shù)據(jù)庫(kù)(或查詢服務(wù)器緩存,如下面例子中)獲取數(shù)據(jù)返回給前端:
/**
* 根據(jù)多個(gè)分類(lèi)編號(hào)獲取多個(gè)字典集合
* @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,>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 輕松掌握J(rèn)avaScript代理模式
- JavaScript設(shè)計(jì)模式之代理模式詳解
- JavaScript的設(shè)計(jì)模式經(jīng)典之代理模式
- JavaScript設(shè)計(jì)模式之代理模式簡(jiǎn)單實(shí)例教程
- js 設(shè)置緩存及獲取設(shè)置的緩存
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布訂閱模式)原理與實(shí)現(xiàn)方法示例
- JavaScript設(shè)計(jì)模式之工廠模式和抽象工廠模式定義與用法分析
- JavaScript設(shè)計(jì)模式之構(gòu)造器模式(生成器模式)定義與用法實(shí)例分析
- JavaScript設(shè)計(jì)模式之單例模式原理與用法實(shí)例分析
- JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】
- JavaScript設(shè)計(jì)模式之緩存代理模式原理與簡(jiǎn)單用法示例
相關(guān)文章
JavaScript高級(jí)編程之Array的用法總結(jié)
這篇文章主要為大家介紹了JavaScript中Array常見(jiàn)用法的總結(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-11-11
Flutter實(shí)現(xiàn)仿微信底部菜單欄功能
這篇文章主要介紹了Flutter實(shí)現(xiàn)仿微信底部菜單欄,需要的朋友可以參考下2019-09-09
JS 實(shí)現(xiàn)導(dǎo)航菜單中的二級(jí)下拉菜單的幾種方式
這篇文章主要介紹了JS 實(shí)現(xiàn)導(dǎo)航菜單中的二級(jí)下拉菜單的幾種方式的相關(guān)資料,這里提供了三種方式,和實(shí)例代碼,需要的朋友可以參考下2016-10-10
javascript兩種function的定義介紹及區(qū)別說(shuō)明
javascript兩種function的定義方式function a(){}和a=function(){}具體使用如下,感興趣的朋友可以參考下,希望對(duì)你對(duì)你學(xué)習(xí)function的定義有所幫助2013-05-05
JavaScript設(shè)計(jì)模式手寫(xiě)示例講解
這篇文章主要介紹了JavaScript設(shè)計(jì)模式手寫(xiě)示例,設(shè)計(jì)模式(Design pattern) 是解決軟件開(kāi)發(fā)某些特定問(wèn)題而提出的一些解決方案也可以理解成解決問(wèn)題的一些思路。通過(guò)設(shè)計(jì)模式可以幫助我們?cè)鰪?qiáng)代碼的可重用性、可擴(kuò)充性、 可維護(hù)性、靈活性好2022-12-12
javascript實(shí)現(xiàn)的基于金山詞霸網(wǎng)絡(luò)翻譯的代碼
下面的這段代碼是基于金山詞霸網(wǎng)絡(luò)翻譯提供的接口,遠(yuǎn)程調(diào)用文件,可以作為一個(gè)自定義的在線查詢工具。2010-01-01
javascript實(shí)現(xiàn)根據(jù)3原色制作顏色選擇器的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)根據(jù)3原色制作顏色選擇器的方法,涉及javascript操作頁(yè)面元素屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07

