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

Javascript緩存API

 更新時(shí)間:2016年06月14日 11:52:58   投稿:lijiao  
JavaScript ServiceWorker API的好處就是讓W(xué)EB開(kāi)發(fā)人員輕松的控制緩存。這篇文章主要為大家詳細(xì)介紹了Javascript緩存API,感興趣的小伙伴們可以參考一下

JavaScript ServiceWorker API的好處就是讓W(xué)EB開(kāi)發(fā)人員輕松的控制緩存。雖然使用ETags等技術(shù)也是一種控制緩存的技術(shù),按使用JavaScript讓程序來(lái)控制緩存功能更強(qiáng)大,更自由。當(dāng)然,強(qiáng)大有強(qiáng)大的好處,也有弊處——你需要做善后處理,所謂的善后處理,就是要清理緩存。

下面我們來(lái)看看如何創(chuàng)建緩存對(duì)象、在緩存里添加請(qǐng)求緩存數(shù)據(jù),從緩存里刪除請(qǐng)求緩存的數(shù)據(jù),最后是如何完全的刪除緩存。

判斷瀏覽器對(duì)緩存對(duì)象cache API的支持

檢查瀏覽器是否支持Cache API…

if('caches' in window) {
 // Has support!
}

…檢查window里是否存在caches對(duì)象。

創(chuàng)建一個(gè)緩存對(duì)象

創(chuàng)建一個(gè)緩存對(duì)象的方法是使用caches.open(),并傳入緩存的名稱(chēng):

caches.open('test-cache').then(function(cache) {
 // 緩存創(chuàng)建完成,現(xiàn)在就可以訪問(wèn)了
});

這個(gè)caches.open方法返回一個(gè)Promise,其中的cache對(duì)象新創(chuàng)建出來(lái),如果是以前創(chuàng)建過(guò),就不重新創(chuàng)建。

添加緩存數(shù)據(jù)

對(duì)于這類(lèi)的緩存,你可以把它想象成一個(gè)Request對(duì)象數(shù)組,Request請(qǐng)求獲取的響應(yīng)數(shù)據(jù)將會(huì)按鍵值存儲(chǔ)在緩存對(duì)象里。有兩個(gè)方法可以往緩存里添加數(shù)據(jù):add 和 addAll。用這兩個(gè)方法將要緩存的請(qǐng)求的地址添加進(jìn)去。關(guān)于Request對(duì)象的介紹你可以參考fetch API這篇文章。

使用addAll方法可以批量添加緩存請(qǐng)求:

caches.open('test-cache').then(function(cache) { 
 cache.addAll(['/', '/images/logo.png'])
 .then(function() { 
 // Cached!
 });
});

這個(gè)addAll方法可以接受一個(gè)地址數(shù)組作為參數(shù),這些請(qǐng)求地址的響應(yīng)數(shù)據(jù)將會(huì)被緩存在cache對(duì)象里。addAll返回的是一個(gè)Promise。添加單個(gè)地址使用add方法:

caches.open('test-cache').then(function(cache) {
 cache.add('/page/1'); // "/page/1" 地址將會(huì)被請(qǐng)求,響應(yīng)數(shù)據(jù)會(huì)緩存起來(lái)。
});

add()方法還可以接受一個(gè)自定義的Request:

caches.open('test-cache').then(function(cache) {
 cache.add(new Request('/page/1', { /* 請(qǐng)求參數(shù) */ }));
});

跟add()方法很相似,put()方法也可以添加請(qǐng)求地址,同時(shí)添加它的響應(yīng)數(shù)據(jù):

fetch('/page/1').then(function(response) {
 return caches.open('test-cache').then(function(cache) {
 return cache.put('/page/1', response);
 });
});

訪問(wèn)緩存數(shù)據(jù)

要查看已經(jīng)換的請(qǐng)求數(shù)據(jù),我們可以使用緩存對(duì)象里的keys()方法來(lái)獲取所有緩存Request對(duì)象,以數(shù)組形式:

caches.open('test-cache').then(function(cache) { 
 cache.keys().then(function(cachedRequests) { 
 console.log(cachedRequests); // [Request, Request]
 });
});

/*
Request {
 bodyUsed: false
 credentials: "omit"
 headers: Headers
 integrity: ""
 method: "GET"
 mode: "no-cors"
 redirect: "follow"
 referrer: ""
 url: "http://www.webhek.com/images/logo.png"
}
*/

如果你想查看緩存的Request請(qǐng)求的響應(yīng)內(nèi)容,可以使用cache.match()或cache.matchAll()方法:

caches.open('test-cache').then(function(cache) {
 cache.match('/page/1').then(function(matchedResponse) {
 console.log(matchedResponse);
 });
});

/*
Response {
 body: (...),
 bodyUsed: false,
 headers: Headers,
 ok: true,
 status: 200,
 statusText: "OK",
 type: "basic",
 url: "https://www.webhek.com/page/1"
}
*/

關(guān)于Response對(duì)象的用法和詳細(xì)信息,你可以參考fetch API這篇文章。

刪除緩存里的數(shù)據(jù)

從緩存里刪除數(shù)據(jù),我們可以使用cache對(duì)象里的delete()方法:

caches.open('test-cache').then(function(cache) {
 cache.delete('/page/1');
});

這樣,緩存里將不再有/page/1請(qǐng)求數(shù)據(jù)。

獲取現(xiàn)有的緩存里的緩存名稱(chēng)

想要獲取緩存里已經(jīng)存在的緩存數(shù)據(jù)的名稱(chēng),我們需要使用caches.keys()方法:

caches.keys().then(function(cacheKeys) { 
 console.log(cacheKeys); // ex: ["test-cache"]
});

window.caches.keys()返回的也是一個(gè)Promise。

刪除一個(gè)緩存對(duì)象

想要?jiǎng)h除一個(gè)緩存對(duì)象,你只需要緩存的鍵名即可:

caches.delete('test-cache').then(function() { 
 console.log('Cache successfully deleted!'); 
});

大量刪除舊緩存數(shù)據(jù)的方法:

// 假設(shè)`CACHE_NAME`是新的緩存的名稱(chēng)
// 現(xiàn)在清除舊的緩存
var CACHE_NAME = 'version-8';

// ...

caches.keys().then(function(cacheNames) {
 return Promise.all(
 cacheNames.map(function(cacheName) {
 if(cacheName != CACHE_NAME) {
 return caches.delete(cacheName);
 }
 })
 );
});

想成為一個(gè)service worker專(zhuān)家?上面的這些代碼值得放到你的儲(chǔ)備庫(kù)里?;鸷鼮g覽器和谷歌瀏覽器都支持service worker,相信很快就會(huì)有更多的網(wǎng)站、app使用這種緩存技術(shù)來(lái)提高運(yùn)行速度。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js form 驗(yàn)證函數(shù) 當(dāng)前比較流行的錯(cuò)誤提示

    js form 驗(yàn)證函數(shù) 當(dāng)前比較流行的錯(cuò)誤提示

    js數(shù)據(jù)驗(yàn)證、js email驗(yàn)證、js url驗(yàn)證、js長(zhǎng)度驗(yàn)證、js數(shù)字驗(yàn)證等
    2009-06-06
  • javascript 類(lèi)型判斷代碼分析

    javascript 類(lèi)型判斷代碼分析

    今天看到 司徒一篇blog, javascript深拷貝,其中涉及到一種判斷類(lèi)型的方法,特分析如下
    2010-03-03
  • 微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器

    微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器

    這篇文章介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • JS代碼簡(jiǎn)潔方式之函數(shù)方法詳解

    JS代碼簡(jiǎn)潔方式之函數(shù)方法詳解

    這篇文章主要介紹了JS代碼簡(jiǎn)潔方式之函數(shù)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解用js代碼觸發(fā)dom事件的實(shí)現(xiàn)方案

    詳解用js代碼觸發(fā)dom事件的實(shí)現(xiàn)方案

    這篇文章主要介紹了詳解用js代碼觸發(fā)dom事件的實(shí)現(xiàn)方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解webpack中的publicpath

    詳解webpack中的publicpath

    這篇文章主要介紹了webpack中的publicpath,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • js實(shí)現(xiàn)分頁(yè)功能

    js實(shí)現(xiàn)分頁(yè)功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)分頁(yè)功能,頁(yè)面查詢(xún)實(shí)現(xiàn)分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JS delegate與live淺析

    JS delegate與live淺析

    這篇文章主要介紹了JS delegate與live,有需要的朋友可以參考一下
    2013-12-12
  • D3.js進(jìn)階系列之CSV表格文件的讀取詳解

    D3.js進(jìn)階系列之CSV表格文件的讀取詳解

    D3.js支持從外部讀取數(shù)據(jù)進(jìn)行圖形交互(Loading External Resources),支持的格式有CSV、txt、Html、tsv、xml文本文件和JSON XML數(shù)據(jù)結(jié)構(gòu),下面這篇文章主要給大家介紹了D3.js中CSV表格文件讀取的相關(guān)資料,需要的朋友可以參考下。
    2017-06-06
  • 仿163填寫(xiě)郵件地址自動(dòng)顯示下拉(無(wú)優(yōu)化)

    仿163填寫(xiě)郵件地址自動(dòng)顯示下拉(無(wú)優(yōu)化)

    本框內(nèi)填個(gè)1,這些值都寫(xiě)在隱藏域了。代碼里可以看到,用戶輸入包含在里面的時(shí)候,可以按ENTER鍵選中.
    2008-11-11

最新評(píng)論

平山县| 壤塘县| 开江县| 军事| 卢湾区| 周口市| 射洪县| 商城县| 镇原县| 静安区| 陵水| 诸城市| 柘荣县| 赤峰市| 石景山区| 乌兰察布市| 连城县| 资兴市| 得荣县| 桃江县| 宝山区| 墨玉县| 大石桥市| 岢岚县| 福贡县| 兴仁县| 如东县| 颍上县| 昔阳县| 双柏县| 云梦县| 清河县| 泾源县| 汉中市| 本溪| 印江| 合水县| 海城市| 荔浦县| 安陆市| 台州市|