CacheStorage详解

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
轻量应用服务器 2vCPU 4GiB,适用于搭建容器环境
简介: 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文件等。
相关文章
|
资源调度 前端开发 算法
前端依赖版本重写指南
感谢神奇的 Semver 动态规则,npm 社区经常会发生依赖包更新后引入破坏变更的情况(应用没有使用依赖锁的话),而应用开发者就要在自己的依赖声明里先临时绕过,避免安装到有问题的版本,如果是一级依赖,只需要改 package.json 的声明就可以了,但如果是子依赖,就需要进行版本重写(overrides/resolution)了。本文是一篇针对版本重写功能的指南性文章,当你遇到如下的问题时,就可以按照对应的依赖重写语法,解决这些依赖问题了。
7576 1
前端依赖版本重写指南
|
数据采集 缓存 数据挖掘
什么是代理IP?代理IP有什么用途
什么是代理IP?代理IP有什么用途
735 0
|
资源调度 前端开发 jenkins
前端工程化(Frontend Tooling):优化开发流程的关键
前端工程化是现代Web开发的关键组成部分,它包括一系列工具、实践和流程,旨在提高开发效率、代码质量和可维护性。本博客将深入探讨前端工程化的概念、工具以及如何在项目中应用它们,以改善您的前端开发体验。
1073 0
|
存储 缓存 前端开发
如何使用 CacheStorage 实现离线缓存
CacheStorage 是一种在客户端存储数据的 API,适用于 Service Worker。通过它,可以实现网页资源的离线缓存,提高应用加载速度和用户体验。使用时,先打开缓存,然后添加、获取或删除资源,确保应用即使在网络不可用时也能正常运行。
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
8月前
|
人工智能 JavaScript 前端开发
一个支持阿里云百炼平台DeepSeek R1大模型(智能体)的Wordpress插件,AI Agent or Chatbot.
这是一个将阿里云DeepSeek AI服务集成到WordPress的聊天机器人插件,支持多轮对话、上下文记忆和自定义界面等功能。用户可通过短代码轻松添加到页面,并支持多种配置选项以满足不同需求。项目采用MIT协议授权,代码仓位于GitHub与Gitee。开发者Chi Leung为长期境外工作,代码注释以英文为主。适合需要在WordPress网站中快速部署AI助手的用户使用。
.cer 文件添加到钥匙串报错:不能修改“System Roots”钥匙串
1、报错信息: 不能修改“System Roots”钥匙串: 要更改根证书是否会被信任,请在“钥匙串访问”中打开它,然后修改它的信任设置 2、网上搜索的答案都是: 钥匙串访问的界面左侧,选择“登录”或login按钮,直接将.
6087 0
|
NoSQL MongoDB Python
【Python】已完美解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tostart
【Python】已完美解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tostart
873 1
|
11月前
|
JSON API 数据处理
如何运用获得京东商品详情API接口搬运商品到自己的电商平台?(一篇文章全搞定)
本文介绍如何利用京东商品详情API接口,将商品信息高效搬运至第三方电商平台。主要内容包括:前期准备(注册账号、申请权限、阅读文档、技术准备),API接口调用(构造请求URL、发送请求、解析返回数据、调用频率限制),数据处理与上架(清洗整理、分类设置、信息上传、商品审核),定时更新与维护(更新商品信息、信息维护、错误处理与日志记录),以及案例分析和优化建议。通过合理使用该接口,可提高运营效率,丰富商品种类,增强平台竞争力。
345 13
|
安全 JavaScript Shell
vite中环境变量的使用与配置,非常实用详细!
【8月更文挑战第2天】vite中如何使用环境变量?根据当前的代码环境产生值的变化的变量就叫做环境变量。本文将详细介绍vite中如何使用环境变量
1719 1

热门文章

最新文章

下一篇
oss云网关配置