浏览器端的缓存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{ //渲染 ........ }