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

Javascript緩存API

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

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ù)

要查看已經(jīng)換的請求數(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請求的響應內(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"
}
*/

關于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)有的緩存里的緩存名稱

想要獲取緩存里已經(jīng)存在的緩存數(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專家?上面的這些代碼值得放到你的儲備庫里?;鸷鼮g覽器和谷歌瀏覽器都支持service worker,相信很快就會有更多的網(wǎng)站、app使用這種緩存技術來提高運行速度。

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

相關文章

  • js form 驗證函數(shù) 當前比較流行的錯誤提示

    js form 驗證函數(shù) 當前比較流行的錯誤提示

    js數(shù)據(jù)驗證、js email驗證、js url驗證、js長度驗證、js數(shù)字驗證等
    2009-06-06
  • javascript 類型判斷代碼分析

    javascript 類型判斷代碼分析

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

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

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

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

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

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

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

    詳解webpack中的publicpath

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

    js實現(xiàn)分頁功能

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

    JS delegate與live淺析

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

    D3.js進階系列之CSV表格文件的讀取詳解

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

    仿163填寫郵件地址自動顯示下拉(無優(yōu)化)

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

最新評論

怀来县| 来宾市| 若尔盖县| 利津县| 冀州市| 科技| 新余市| 盘锦市| 永胜县| 临夏市| 金华市| 广南县| 黔西| 和静县| 莲花县| 武威市| 沙坪坝区| 石楼县| 云和县| 察隅县| 新乡县| 高密市| 开江县| 金堂县| 新蔡县| 泰安市| 公主岭市| 山东| 云林县| 乐亭县| 嘉义县| 随州市| 凤城市| 玉溪市| 娄底市| 靖州| 黄龙县| 连云港市| 海淀区| 建阳市| 镇安县|