JavaScript中的缓存API

了解如何使用JavaScript中的Cache API缓存资源。javascript

Cache API容许服务工做者对要缓存的资源(HTML页面、CSS、JavaScript文件、图片、JSON等)进行控制。经过Cache API,服务工做者能够缓存资源以供脱机使用,并在之后检索它们。前端

检测Cache支持

检查 caches 对象在 window 中是否可用。java

let isCacheSupported = 'caches' in window;

cachesCacheStorage 的一个实例。api

建立/初始化Cache

咱们能够使用 open 方法建立一个具备 name 的缓存,这将返回 promise。若是缓存已经存在,则不会建立新的缓存。数组

caches.open('cacheName').then( cache => {
});
  • 你不能访问为其余源(域)设置的缓存。
  • 你正在建立的缓存将为你的域建立。
  • 你能够为同一个域添加多个缓存,能够经过 caches.keys() 访问。

将项目添加到缓存

能够使用三种方法 addaddAllset 来缓存资源。 add()addAll() 方法自动获取资源并对其进行缓存,而在 set 方法中,咱们将获取数据并设置缓存。promise

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 能够让你存储任何请求/响应对。fetch

put

put 为当前的 Cache 对象添加一个key/value对,在 put 中,咱们须要手动获取请求并设置值。url

注意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)
})

彻底删除缓存

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

来源:https://medium.com/javascript-dots,做者:Jeep,翻译:公众号《前端全栈开发者》

相关文章
相关标签/搜索