使用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, 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,>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM