1. 程式人生 > 實用技巧 >JavaScript中的快取API

JavaScript中的快取API

瞭解如何使用JavaScript中的Cache API快取資源。

Cache API允許服務工作者對要快取的資源(html頁面、css、JavaScript檔案、圖片、jsON等)進行控制。通過Cache API,服務工作者可以快取資源以供離線使用,並在以後檢索它們。

檢測Cache支援

檢查 caches 物件在 window 中是否可用。

let isCacheSupported = 'caches' in window;

caches 是 CacheStorage 的一個例項。

建立/初始化Cache

我們可以使用 open 方法建立一個具有 name 的快取,這將返回 promise。如果快取已經存在,則不會建立新的快取。

caches.open('cacheName').then( cache => {
});
  • 你不能訪問為其他源(域)設定的快取。
  • 你正在建立的快取將為你的域建立。
  • 你可以為同一個域新增多個快取,可以通過 caches.keys() 訪問。

將專案新增到快取

可以使用三種方法 add,addAll,set 來快取資源。 add() 和 addAll() 方法自動獲取資源並對其進行快取,而在 set 方法中,我們將獲取資料並設定快取。

add

let cacheName = 'userSettings'; 
let url = '/api/get/usersettings';
caches.open(cacheName).then( cache => {
   cache.add(url).then( () => {
       console.log("Data cached ")
    });
});

在上面的程式碼中,內部對 /api/get/usersettings url的請求已傳送到伺服器,一旦接收到資料,響應將被快取。

addAll

addAll 接受URL陣列,並在快取所有資源時返回Promise。

let urls = ['/get/userSettings?userId=1', '/get/userDetails'];
caches.open(cacheName).then( cache => {
cache.addAll(urls).then( () => {
       console.log("Data cached ")
    });
});

Cache.add/Cache.addAll 不快取 Response.status 值不在200範圍內的響應,Cache.put 可以讓你儲存任何請求/響應對。

put

put 為當前的 Cache 物件新增一個key/value對,在 put 中,我們需要手動獲取請求並設定值。

注意:put() 將覆蓋先前儲存在快取記憶體中與請求匹配的任何鍵/值對。

let cacheName = 'userSettings';
let url = '/api/get/userSettings';
fetch(url).then(res => {
  return caches.open(cacheName).then(cache => {
    return cache.put(url, res);
  })
})

從快取中檢索

使用 cache.match() 可以得到儲存到URL的 Response。

const cacheName = 'userSettings'
const url = '/api/get/userSettings'
caches.open(cacheName).then(cache => {
  cache.match(url).then(settings => {
    console.log(settings);
  }
});

settings 是一個響應物件,它看起來像

Response {
  body: (...),
  bodyUsed: false,
  headers: Headers,
  ok: true,
  status: 200,
  statusText: "OK",
  type: "basic",
  url: "https://test.com/api/get/userSettings"
}

檢索快取中的所有專案

cache 物件包含 keys 方法,這些方法將擁有當前快取物件的所有url。

caches.open(cacheName).then( (cache) => { 
  cache.keys().then((arrayOfRequest) => { 
      console.log(arrayOfRequest); // [Request,  Request]
  });
});

arrayOfRequest是一個Request物件陣列,其中包含有關請求的所有詳細資訊。

檢索所有快取

caches.keys().then(keys => {
  // keys是一個數組,其中包含鍵的列表
})

從快取中刪除專案

可以對 cache 物件使用 delete 方法來刪除特定的快取請求。

let cacheName = userSettings; 
let urlToDelete = '/api/get/userSettings';
caches.open(cacheName).then(cache => {
  cache.delete(urlToDelete)
})

廣州vi設計公司 http://www.maiqicn.com 我的007辦公資源網 https://www.wode007.com

完全刪除快取

caches.delete(cacheName).then(() => {
   console.log('Cache successfully deleted!');
})