浏览器端的缓存localStorage应用

服务器传输大量信息到客户端(浏览器),即使有了服务器端缓存,用户每次打开web页面都需要请求服务器,传输大量信息,然后渲染。

主要存在网络传输成本,如果我们将大量的不太会变动的字典信息存储于localStorage,就能实现高性能的操作。

由于localStorage是永久的,自身没有过期时间,这对我们的字典变动存在一些不同步的问题,除了浏览器端用户手动点击清缓存,我打算给localStorage结合一个有效期来自动清除。

customLocalStorage.js 

var __localStorage = {
    set : function(key, value, mins){
        if(!window.localStorage){//浏览器ie8以下不支持,直接跳过
            return;
        }
        if(typeof(mins) == ‘undefined‘){
            var item = {
                data : value
            };
        }else{
            var item = {
                data : value,
                endTime : new Date() . getTime() + mins * 60 * 1000
            };
        }
        localStorage.setItem(key, JSON.stringify(item));
    },
    get : function(key){
        if(!window.localStorage){//浏览器不支持,直接返回null
            return null;
        }
        var val = localStorage.getItem(key);
        if(!val) return null;
        val = JSON.parse(val);
        //判断是否设置过期时间
        if(typeof(val.endTime) == ‘undefined‘ || (typeof(val.endTime) != ‘undefined‘ && val.endTime > new Date().getTime())){
            return val.data;
        }else{
            localStorage.removeItem(key);
            return null;
        }
    },
    enable : function () {
        if(!window.localStorage){
            return false;
        }
        return true;
    }
}

使用

var emps = __localStorage.get("emps");
        if(emps==null){
            $.ajax({
                url: "/url",
                type: "post",
                async: true,
                success: function (json) {
                    emps = json;

                    //渲染
                    ...........
                    __localStorage.set("emps", emps,15);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    mini.showTips({content: jqXHR.responseJSON.message, state: ‘danger‘});
                }
            });
        }else{
            //渲染
            ........
        }