CacheStorage详解

简介: CacheStorage 是 Web API 的一部分,用于管理缓存对象的存储。它允许开发者在客户端存储和检索请求-响应对,实现离线访问和性能优化。通过 CacheStorage 接口,可以创建、删除和查询缓存,以及控制资源的缓存策略。
  1. CacheStorage的基本概念

    • 定义与作用:CacheStorage是浏览器提供的一种存储机制,用于缓存网络资源,如脚本、样式表、图片等。它是Service Worker API的一部分,目的是为了提高网页的性能和离线可用性。例如,当用户第一次访问一个网页时,浏览器可以将网页的一些关键资源(如HTML文件、主要的CSS和JavaScript文件)存储到CacheStorage中。当下次访问该网页或者在离线状态下再次请求这些资源时,浏览器可以直接从CacheStorage中获取,而不必重新从网络下载,从而加快了网页的加载速度。
    • 与其他存储机制的关系:与localStorage和sessionStorage不同,CacheStorage主要用于缓存网络请求的响应,并且存储的内容通常是由浏览器或Service Worker自动管理的。而localStorage和sessionStorage主要用于存储应用程序的数据,如用户的偏好设置、登录状态等,并且是通过JavaScript代码显式地进行存储和读取操作。
  2. CacheStorage的使用方法

    • 打开和获取缓存(Cache)对象
      • 可以通过caches.open()方法来打开一个指定名称的缓存。如果缓存不存在,则会创建一个新的缓存。例如:
        caches.open('my - cache - name').then((cache) => {
                 
          // 在这里可以使用cache对象进行操作
        });
        
      • 打开缓存后,可以使用cache对象进行各种操作,如添加、匹配和删除缓存项。
    • 添加缓存项
      • 可以使用cache.addAll()方法来添加一组资源到缓存中。这些资源通常是通过网络请求获取的响应。例如,在Service Worker中,可以这样添加缓存项:
        self.addEventListener('fetch', function (event) {
                 
          event.respondWith(
              caches.open('my - cache - name').then((cache) => {
                 
                  return cache.addAll([
                      '/',
                      '/index.html',
                      '/styles.css',
                      '/script.js'
                  ]);
              })
          );
        });
        
      • 上述代码在fetch事件中,当Service Worker拦截到网络请求时,会尝试将指定的资源添加到名为my - cache - name的缓存中。
    • 匹配缓存项
      • 使用cache.match()方法可以在缓存中查找与给定请求匹配的缓存项。例如,在Service Worker的fetch事件处理程序中,可以这样使用:
        self.addEventListener('fetch', function (event) {
                 
          event.respondWith(
              caches.open('my - cache - name').then((cache) => {
                 
                  return cache.match(event.request).then((response) => {
                 
                      if (response) {
                 
                          return response;
                      }
                      return fetch(event.request);
                  });
              })
          );
        });
        
      • 这段代码首先尝试从缓存中查找与请求匹配的响应,如果找到则直接返回缓存中的响应,否则通过fetch方法从网络获取响应。
    • 删除缓存项和缓存本身
      • 可以使用cache.delete()方法删除缓存中的单个项目。例如,要删除一个特定的URL对应的缓存项,可以这样做:
        caches.open('my - cache - name').then((cache) => {
                 
          cache.delete('/old - resource.html');
        });
        
      • 要删除整个缓存,可以使用caches.delete()方法并指定缓存的名称。例如:
        caches.delete('my - cache - name');
        
  3. CacheStorage的生命周期和缓存策略

    • 缓存的生命周期
      • 缓存项在CacheStorage中的存储时间是由缓存策略决定的。一些缓存可能会一直存储,直到用户手动清除浏览器缓存或者缓存被代码显式删除。而另一些缓存可能会根据一定的规则(如缓存过期时间、资源更新情况等)自动更新或清除。
      • 例如,在设置缓存时,可以通过在响应头中添加Cache - ControlExpires等字段来指定缓存的有效期。浏览器会根据这些信息来判断何时需要重新获取资源,而不是使用缓存中的旧资源。
    • 缓存策略
      • 强缓存策略:如果响应头中有Cache - Control: max - age = 31536000(表示缓存有效期为一年)这样的设置,并且缓存尚未过期,浏览器会直接使用缓存中的资源,而不会发送网络请求。这种策略适用于那些很少变化的资源,如网站的图标、一些基础的JavaScript库等。
      • 协商缓存策略:当响应头中有Last - ModifiedETag等字段时,浏览器在使用缓存资源之前会先发送一个条件请求(例如,在请求头中带上If - Modified - SinceIf - None - Match字段)到服务器,询问资源是否已经更新。如果服务器返回304 Not Modified响应,表示资源没有更新,浏览器继续使用缓存中的资源;如果服务器返回新的资源内容,浏览器更新缓存并使用新资源。这种策略适用于那些可能会定期更新的资源,如网页的HTML文件等。
相关文章
|
JavaScript
vue 实现表格循环滚动 vue-seamless-scroll插件的安装与使用
vue 实现表格循环滚动 vue-seamless-scroll插件的安装与使用
1483 0
|
10月前
|
监控 安全 数据安全/隐私保护
阿里云 | KMS密钥跨账号共享
本文介绍了在阿里云Landing Zone环境下,通过RAM授权实现KMS密钥跨账号共享的方法。该方案以Security账号为核心管理密钥,各应用账号按需获取权限,无需共享KMS实例,提升了安全性与管理效率。内容涵盖共享原理、操作步骤、管理策略及注意事项,适用于多部门协同的企业场景,助力企业实现安全合规的数据加密管理。
379 5
阿里云 | KMS密钥跨账号共享
|
4月前
|
Rust 安全 JavaScript
掌握Option类型(Rust中优雅处理空值的利器)
Option是Rust处理“可能无值”的核心类型,通过Some和None枚举强制显式处理空值情况,避免空指针异常。它结合unwrap、map、and_then等方法,实现安全、优雅的空值控制,是Rust内存安全设计的基石,助力开发者写出健壮的代码。来源:https://www.vpshk.cn/
|
7月前
|
前端开发
Promise的then方法返回的新Promise对象的状态为“成功(Resolved)”时,链式调用会如何执行?
Promise的then方法返回的新Promise对象的状态为“成功(Resolved)”时,链式调用会如何执行?
293 0
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
JSON API 数据处理
如何运用获得京东商品详情API接口搬运商品到自己的电商平台?(一篇文章全搞定)
本文介绍如何利用京东商品详情API接口,将商品信息高效搬运至第三方电商平台。主要内容包括:前期准备(注册账号、申请权限、阅读文档、技术准备),API接口调用(构造请求URL、发送请求、解析返回数据、调用频率限制),数据处理与上架(清洗整理、分类设置、信息上传、商品审核),定时更新与维护(更新商品信息、信息维护、错误处理与日志记录),以及案例分析和优化建议。通过合理使用该接口,可提高运营效率,丰富商品种类,增强平台竞争力。
485 13
|
小程序 安全 定位技术
高德地图实现-微信小程序地图导航
高德地图实现-微信小程序地图导航
2736 1
|
Kubernetes 架构师 Java
史上最全对照表:大厂P6/P7/P8 职业技能 薪资水平 成长路线
40岁老架构师尼恩,专注于帮助读者提升技术能力和职业发展。其读者群中,多位成员成功获得知名互联网企业的面试机会。尼恩不仅提供系统化的面试准备指导,还特别针对谈薪酬环节给予专业建议,助力求职者在与HR谈判时更加自信。此外,尼恩还分享了阿里巴巴的职级体系,作为行业内广泛认可的标准,帮助读者更好地理解各职级的要求和发展路径。通过尼恩的技术圣经系列PDF,如《尼恩Java面试宝典》等,读者可以进一步提升自身技术实力,应对职场挑战。关注“技术自由圈”公众号,获取更多资源。
解决 Blocked a frame with origin “xxx“ from accessing a cross-origin frame
解决 Blocked a frame with origin “xxx“ from accessing a cross-origin frame
5566 0
|
存储 Web App开发 移动开发
📕Local Storage、Session Storage和Cache Storage之间的区别
你知道什么是Cache Storage、Local Storage和Session Storage吗?它们都是一些可以在你的浏览器里保存信息的介质,但是它们有什么不同呢?🤔
1357 0
📕Local Storage、Session Storage和Cache Storage之间的区别

热门文章

最新文章