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

詳解Javascript獲取緩存和清除緩存API

 更新時間:2017年05月25日 16:31:44   作者:hehekai  
本篇文章主要介紹了詳解Javascript獲取緩存和清除緩存API,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

判斷瀏覽器對緩存對象cache API的支持

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

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

…檢查window里是否存在caches對象。

創(chuàng)建一個緩存對象

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

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

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

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

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

使用addAll方法可以批量添加緩存請求:

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

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

caches.open('test-cache').then(function(cache) {
 cache.add('/page/1'); // "/page/1" 地址將會被請求,響應數(shù)據(jù)會緩存起來。
});
add()方法還可以接受一個自定義的Request:

caches.open('test-cache').then(function(cache) {
 cache.add(new Request('/page/1', { /* 請求參數(shù) */ }));
});
//跟add()方法很相似,put()方法也可以添加請求地址,同時添加它的響應數(shù)據(jù):

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

訪問緩存數(shù)據(jù)

要查看已經換的請求數(shù)據(jù),我們可以使用緩存對象里的keys()方法來獲取所有緩存Request對象,以數(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請求的響應內容,可以使用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"
}
*/

關于Response對象的用法和詳細信息,你可以參考fetch API這篇文章。

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

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

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

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

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

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

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

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

刪除一個緩存對象

想要刪除一個緩存對象,你只需要緩存的鍵名即可:

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

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

// 假設`CACHE_NAME`是新的緩存的名稱
// 現(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);
   }
  })
 );
});

想成為一個service worker專家?上面的這些代碼值得放到你的儲備庫里。火狐瀏覽器和谷歌瀏覽器都支持service worker,相信很快就會有更多的網(wǎng)站、app使用這種緩存技術來提高運行速度。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 10個很少使用的JavaScript?Console方法分享

    10個很少使用的JavaScript?Console方法分享

    你一定聽說過?console.log()?,而且可能一直在使用它,在本文中,我們將探討一些最有用的控制臺方法,以及它們在數(shù)據(jù)可視化、調試等方面的用途,感興趣的小伙伴可以學習一下
    2023-09-09
  • JavaScript中的聲明提升實例詳解

    JavaScript中的聲明提升實例詳解

    這篇文章主要為大家介紹了JavaScript中的聲明提升實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JS實現(xiàn)線性表的順序表示方法示例【經典數(shù)據(jù)結構】

    JS實現(xiàn)線性表的順序表示方法示例【經典數(shù)據(jù)結構】

    這篇文章主要介紹了JS實現(xiàn)線性表的順序表示方法,簡單分析了線性表的原理并結合實例形式給出了線性表的插入與刪除實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • JS實現(xiàn)圖片手風琴效果

    JS實現(xiàn)圖片手風琴效果

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)圖片手風琴效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 最好用的二級聯(lián)動 原生js實現(xiàn)你值得擁有

    最好用的二級聯(lián)動 原生js實現(xiàn)你值得擁有

    二級聯(lián)動效果,實現(xiàn)方法有很多,不過其他文章中介紹的都比較籠統(tǒng),在本文有一個詳細的實現(xiàn)過程,使用原生js很容易理解,希望大家可以參考下
    2013-09-09
  • javascript實現(xiàn)獲取字符串hash值

    javascript實現(xiàn)獲取字符串hash值

    Hash 可以看作是一個 關聯(lián)數(shù)組,它對每一個值都綁定了一個唯一的鍵(值并不必須是唯一的), 然而,它不能保證迭代時元素的順序始終一致。因為 JavaScript 程序語言的特性,每個對象實際上都是一個 hash,下面我們就來詳細探討下。
    2015-05-05
  • js自定義事件及事件交互原理概述(一)

    js自定義事件及事件交互原理概述(一)

    在JS中事件是JS與瀏覽器交互的主要途徑,本文主要介紹下最簡單的自定義事件,不過還有很多缺陷,感興趣的朋友可以了解下,或許對你學習自定義事件有所幫助
    2013-02-02
  • 關于javascript中限定時間內防止按鈕重復點擊的思路詳解

    關于javascript中限定時間內防止按鈕重復點擊的思路詳解

    下面小編就為大家?guī)硪黄P于javascript中限定時間內防止按鈕重復點擊的思路詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • js核心基礎之構造函數(shù)constructor用法實例分析

    js核心基礎之構造函數(shù)constructor用法實例分析

    這篇文章主要介紹了js核心基礎之構造函數(shù)constructor用法,結合具體實例形式分析了javascript構造函數(shù)constructor概念、原理、使用方法及相關操作注意事項,需要的朋友可以參考下
    2019-05-05
  • javascript抖動元素的小例子

    javascript抖動元素的小例子

    這篇文章介紹了javascript抖動元素的小例子,有需要的朋友可以參考一下
    2013-10-10

最新評論

麻江县| 彝良县| 融水| 乐都县| 额济纳旗| 邵东县| 万全县| 青田县| 聂荣县| 肃南| 张北县| 玛纳斯县| 花垣县| 西华县| 兴山县| 广德县| 芜湖县| 阳城县| 楚雄市| 东阿县| 新民市| 新丰县| 逊克县| 页游| 雷州市| 沙河市| 南川市| 台北市| 祁门县| 宁明县| 临城县| 赣州市| 武威市| 固安县| 个旧市| 五原县| 鄂州市| 淄博市| 东兰县| 吉首市| 荣成市|