多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > javascript 緩存提供程序

javascript 緩存提供程序

來源:程序員人生   發布時間:2013-12-28 14:32:47 閱讀次數:3094次

相信每一個開發者都知道緩存的重要性。從頭至尾有緩存的后臺(memcached,xcache等。) 來減輕db的壓力。對內容分發網絡(CDN)緩存中希望你的瀏覽器緩存那些不止一次的加載資源。當然, 有客戶端緩存,所以你不要重復昂貴的操作(即使是算法或大量的運算)。

這是介紹的是一個不錯的javascript的方面的客戶端解決方案,可選配支持HTML5本地存儲器.

Starting Simple

function CacheProvider() {   // values will be stored here   this._cache = {}; }

Feature detect on local storage

try {   CacheProvider.hasLocalStorage = ('localStorage' in window) && window['localStorage'] !== null; } catch (ex) {   CacheProvider.hasLocalStorage = false; 

}

這里使用try catch的主要原因是 盡管firefox支持該屬性,但是需要在about:config中設置并開啟,否則將會報錯。所以一個簡單的if else不能滿足需求。

下面我們將增加對象本地存儲機制的支持。這個技術是借鑒了Christopher Blizzard的一篇不錯的文章 Saving data with local storage – for which those who didn’t know, you can only store string’s into local storage. Thus we have this…

in / out JSON parsing

if (CacheProvider.hasLocalStorage) {   Storage.prototype.setObject = function(key, value) {     this.setItem(key, JSON.stringify(value));   };   Storage.prototype.getObject = function(key) {     return JSON.parse(this.getItem(key));   }; }

現在就到了我們的三個核心方法了,分別是 get, set, 和clear.

Core class functionality

CacheProvider.prototype = {   /**      * {String} k - the key      * {Boolean} local - get this from local storage?      * {Boolean} o - is the value you put in local storage an object?      */   get: function(k, local, o) {     if (local && CacheProvider.hasLocalStorage) {       var action = o ? 'getObject' : 'getItem';       return localStorage[action](k) || undefined;     } else {       return this._cache[k] || undefined;     }   },   /**      * {String} k - the key      * {Object} v - any kind of value you want to store      * however only objects and strings are allowed in local storage      * {Boolean} local - put this in local storage      */   set: function(k, v, local) {     if (local && CacheProvider.hasLocalStorage) {       if (typeof v !== 'string')) {         // make assumption if it's not a string, then we're storing an object         localStorage.setObject(k, v);       } else {         try {           localStorage.setItem(k, v);         } catch (ex) {           if (ex.name == 'QUOTA_EXCEEDED_ERR') {             // developer needs to figure out what to start invalidating             throw new Exception(v);             return;           }         }       }     } else {       // put in our local object       this._cache[k] = v;     }     // return our newly cached item     return v;   },   /**      * {String} k - the key      * {Boolean} local - put this in local storage      * {Boolean} o - is this an object you want to put in local storage?      */   clear: function(k, local, o) {     if (local && CacheProvider.hasLocalStorage) {       localStorage.removeItem(k);     }     // delete in both caches - doesn't hurt.     delete this._cache[k];   } };

如何運用?

注意在這篇文章的開始,就說了Cache Provider 是可選支配的本地存儲,首先然讓我們看一個沒有本地存儲的例子:

getElementsByClassName

var cache = new CacheProvider; window.getElementsByClassName = getElementsByClassName || function(c) {   var reg = cache.get(c) || cache.set(c, new RegExp("(?:^|s+)" + c + "(?:s+|$)"));   var elements = document.getElementsByTagName('*');   var results = [];   for (var i = 0; i < elements.length; i++) {     if (elements[i].className.match(reg)) {       results.push(elements[i]);     }   }   return results; 

};

備注:下次你調用類函數的時候, 將會用預先編譯好的正則表達式替代夠建造一個表達式。

再舉一個例子:比如 對于大的應用程序需要i18n,你可以緩存一個編譯好的html字符串進入本地存儲中。

var i18nCache = new CacheProvider; if (i18nCache.get('topnav')) {   $('#nav').html(i18nCache.get('topnav')); } else {   ajax('top-nav.tmpl', function(html) {     i18nCache.set('topnav', html);     $('#nav').html(i18nCache.get('topnav'));   }); }

除此之外,你開可以做很多外部資源緩存到本地的事情,加油:)

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本亚洲成高清一区二区三区 | 波多野结衣免费观看视频 | 欧乱色国产精品兔费视频 | 亚洲综合一区二区不卡 | 亚洲视频免费在线观看 | 尤物视频在线观看免费 | 性刺激欧美三级在线观看 | 欧洲一区二区 | 国产成人精品男人免费 | 国产主播福利片在线观看 | 羞羞视频免费观看网站 | 一级aaaaaa片毛片在线播放 | 色悠久久久久综合欧美99 | 男女视频在线免费观看 | 精品国产成人a在线观看 | 色视频一区二区三区 | 欧美一区二区视频三区 | 自拍视频啪 | 免费国产h视频在线观看 | 日本高清com| 欧美性天天 | 亚洲爆乳无码一区二区三区 | 免费av中文字幕 | 欧美成人黑人xx视频免费观看 | 国产成人精品一区二区三在线观看 | 欧美日韩一区二区视频免费看 | 亚洲日本高清 | 动漫一级毛片 | 波多野结中文字幕在线69视频 | 日本香蕉一区二区三区 | 一本久道久久综合中文字幕 | 国产午夜精品久久久久免费视 | 日本午夜视频 | 国产v国产v片大片线观看网站 | 欧美精品在线播放 | 欧美18一19sex性瑜伽 | 日韩视频观看 | 538亚洲欧美国产日韩在线精品 | videosfree性欧美另类 | 毛片无码国产 | 最近的中文字幕大全免费8 最近的中文字幕大全免费版 |