文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript中的缓存API

2024-12-11 18:06

关注

[[335466]]

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

检测Cache支持

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

 

  1. let isCacheSupported = 'caches' in window; 

caches 是 CacheStorage 的一个实例。

创建/初始化Cache

我们可以使用 open 方法创建一个具有 name 的缓存,这将返回 promise。如果缓存已经存在,则不会创建新的缓存。

 

  1. caches.open('cacheName').then( cache => { 
  2. }); 

将项目添加到缓存

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

add

 

  1. let cacheName = 'userSettings'
  2. let url = '/api/get/usersettings'
  3. caches.open(cacheName).then( cache => { 
  4.    cache.add(url).then( () => { 
  5.        console.log("Data cached "
  6.     }); 
  7. }); 

在上面的代码中,内部对 /api/get/usersettings url的请求已发送到服务器,一旦接收到数据,响应将被缓存。

addAll

addAll 接受URL数组,并在缓存所有资源时返回Promise。

 

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

Cache.add/Cache.addAll 不缓存 Response.status 值不在200范围内的响应,Cache.put 可以让你存储任何请求/响应对。

put

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

注意:put() 将覆盖先前存储在高速缓存中与请求匹配的任何键/值对。

 

  1. let cacheName = 'userSettings'
  2. let url = '/api/get/userSettings'
  3. fetch(url).then(res => { 
  4.   return caches.open(cacheName).then(cache => { 
  5.     return cache.put(url, res); 
  6.   }) 
  7. }) 

从缓存中检索

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

 

  1. const cacheName = 'userSettings' 
  2. const url = '/api/get/userSettings' 
  3. caches.open(cacheName).then(cache => { 
  4.   cache.match(url).then(settings => { 
  5.     console.log(settings); 
  6.   } 
  7. }); 

settings 是一个响应对象,它看起来像

 

  1. Response { 
  2.   body: (...), 
  3.   bodyUsed: false
  4.   headers: Headers, 
  5.   ok: true
  6.   status: 200, 
  7.   statusText: "OK"
  8.   type: "basic"
  9.   url: "https://test.com/api/get/userSettings" 

检索缓存中的所有项目

cache 对象包含 keys 方法,这些方法将拥有当前缓存对象的所有url。

 

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

arrayOfRequest是一个Request对象数组,其中包含有关请求的所有详细信息。

检索所有缓存

 

  1. caches.keys().then(keys => { 
  2.   // keys是一个数组,其中包含键的列表 
  3. }) 

从缓存中删除项目

可以对 cache 对象使用 delete 方法来删除特定的缓存请求。

 

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

完全删除缓存

 

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

 

 

来源:前端全栈开发者内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯