最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript客戶端解決方案 緩存提供程序

 更新時間:2010年07月14日 01:42:44   作者:  
這是介紹的是一個不錯的javascript的方面的客戶端解決方案,可選配支持HTML5本地存儲器.
相信每一個開發(fā)者都知道緩存的重要性。從頭至尾有緩存的后臺(memcached,xcache等。) 來減輕db的壓力。對內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)緩存中希望你的瀏覽器緩存那些不止一次的加載資源。當(dāng)然, 有客戶端緩存,所以你不要重復(fù)昂貴的操作(即使是算法或大量的運(yùn)算)。

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

Starting Simple
復(fù)制代碼 代碼如下:

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中設(shè)置并開啟,否則將會報錯。所以一個簡單的if else不能滿足需求。

下面我們將增加對象本地存儲機(jī)制的支持。這個技術(shù)是借鑒了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
復(fù)制代碼 代碼如下:

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));
};
}

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

Core class functionality
復(fù)制代碼 代碼如下:

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];
}

};

如何運(yùn)用?
注意在這篇文章的開始,就說了Cache Provider 是可選支配的本地存儲,首先然讓我們看一個沒有本地存儲的例子:

getElementsByClassName
復(fù)制代碼 代碼如下:

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;
};

備注:下次你調(diào)用類函數(shù)的時候, 將會用預(yù)先編譯好的正則表達(dá)式替代夠建造一個表達(dá)式。


再舉一個例子:比如 對于大的應(yīng)用程序需要i18n,你可以緩存一個編譯好的html字符串進(jìn)入本地存儲中。
復(fù)制代碼 代碼如下:

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'));
});
}

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

相關(guān)文章

  • 微信小程序?qū)崙?zhàn)之雙人五子棋游戲是實(shí)現(xiàn)

    微信小程序?qū)崙?zhàn)之雙人五子棋游戲是實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用微信小程序?qū)崿F(xiàn)雙人五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 原生JavaScript之es6中Class的用法分析

    原生JavaScript之es6中Class的用法分析

    這篇文章主要介紹了原生JavaScript之es6中Class的用法,結(jié)合實(shí)例形式對比分析了es6與es5相關(guān)class定義、區(qū)別及使用技巧,需要的朋友可以參考下
    2020-02-02
  • js仿百度貼吧驗(yàn)證碼特效實(shí)例代碼

    js仿百度貼吧驗(yàn)證碼特效實(shí)例代碼

    這篇文章主要介紹了js仿百度貼吧驗(yàn)證碼特效實(shí)例代碼,有需要的朋友可以參考一下
    2014-01-01
  • layui table 多行刪除(id獲取)的方法

    layui table 多行刪除(id獲取)的方法

    今天小編就為大家分享一篇layui table 多行刪除(id獲取)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript查看數(shù)據(jù)返回值的方法

    JavaScript查看數(shù)據(jù)返回值的方法

    console.log()、alert()?都是JavaScript中用于在開發(fā)過程中輸出信息或向用戶顯示消息的不同方法,它們的主要區(qū)別在于目的、使用場景以及展示方式,本文將給大家介紹JavaScript?中怎么看數(shù)據(jù)返回值,需要的朋友可以參考下
    2024-07-07
  • json原理分析及實(shí)例介紹

    json原理分析及實(shí)例介紹

    這次在項(xiàng)目中前后臺的數(shù)據(jù)交互中用到了json,經(jīng)過這段時間的使用,簡單總結(jié)一下json的原理與使用,需要了解的朋友可以參考下
    2012-11-11
  • js中事件對象和事件委托的介紹

    js中事件對象和事件委托的介紹

    今天小編就為大家分享一篇關(guān)于js中事件對象和事件委托的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 思維導(dǎo)圖插件jsMind的詳細(xì)使用指南

    思維導(dǎo)圖插件jsMind的詳細(xì)使用指南

    jsMind是一個顯示/編輯思維導(dǎo)圖的純的javascript類庫,其基于HTML5的帆布進(jìn)行設(shè)計.jsMind以BSD協(xié)議開源,這篇文章主要給大家介紹了關(guān)于思維導(dǎo)圖插件jsMind的詳細(xì)使用指南,需要的朋友可以參考下
    2024-07-07
  • 微信小程序調(diào)用wx.getImageInfo遇到的坑解決

    微信小程序調(diào)用wx.getImageInfo遇到的坑解決

    這篇文章主要介紹了微信小程序調(diào)用wx.getImageInfo遇到的坑解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 微信小程序刪除處理詳解

    微信小程序刪除處理詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序刪除處理的相關(guān)代碼,用小程序里的模態(tài)框?qū)崿F(xiàn)刪除,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

忻州市| 疏勒县| 抚宁县| 红安县| 蓬溪县| 武威市| 体育| 峡江县| 元氏县| 望江县| 万宁市| 英吉沙县| 瑞昌市| 泊头市| 灵璧县| 五华县| 遵化市| 大厂| 临夏市| 潼关县| 金川县| 宣威市| 柞水县| 平度市| 海伦市| 洪泽县| 冀州市| 多伦县| 成安县| 仁布县| 武义县| 聂荣县| 东乡县| 革吉县| 西和县| 常州市| 当雄县| 阳东县| 博野县| 武山县| 乌审旗|