【前端】缓存相关

本知识页参考:https://zhuanlan.zhihu.com/p/586060532

1. 概述

1.1 应用场景

  1. 静态资源
    1. 场景:图片、CSS、JS 文件等静态资源
    2. 实现:使用 HTTP 缓存控制头,或者利用 CDN 进行边缘缓存
  2. 数据缓存
    1. 场景:请求的返回结果
    2. 实现:使用浏览器的本地存储(如 LocalStorage)、IndexedDB 或者第三方库/框架提供的缓存工具(如react-query)
  3. 页面缓存
    1. 场景:用户访问过的页面内容,尤其是SPA应用
    2. 实现:Vue中可以利用 keep-alive 组件
      1. keep-alive定义:抽象组件,用于缓存组件实例状态 - 而非销毁;实现状态保留避免重复渲染
        1. 提高性能,不必要的组件创建
        2. 不会渲染自己的DOM元素,也不会出现在组件链中
        3. 逻辑抽象
      2. 代码原理
        1. Vue2中(/Front/Note/封装框架知识/Vue/素材/Vue2特性.md)
        data() {
           return {
              cache: {}
           }
        },
        methods: {
           
        }
        
        1. Vue3中
        import { ref } from 'vue';
        export default {
           setup() {
              const cache
           }
        }
        
      3. 内部会使用缓存对象:Vue2-JS,Vue3-Map包裹实例
        1. 组件切到后台deactivated缓存,被激活activated时从缓存对象中恢复实例,而不是重新创建
        2. 更好的缓存模式
          1. include:指定哪些组件应该被缓存
            1. 接收字符串、数组或正则表达式作为参数,匹配组件的名称
              1.
            2. 绑定数字类型
          2. exclude:哪些组件不应该被缓存
          3. max:限制被缓存的最大组件实例数
      4. keep-alive原理
        1. 核心功能:一是render()确定要缓存的vNode及对应组件实例;二是cacheVNode()存储刚要缓存的实例
        2. render():Vue自带,不属于组件
          1. Vue自带的函数,不属于组件的methods。生成组件的虚拟DOM(VNode),决定如何渲染
            1. KeepAlive:特殊的抽象组件,Vue.js用于缓存
            2. 缓存组件实例和状态
          2. Vue内部实现
          <!--英文逗号-->
          <KeepAlive include="a, b">
             <component :is="view" />
          </KeepAlive>
          <!--正则表达式-->
          <KeepAlive :include="/a|b/">
             <component :is="view" />
          </KeepAlive>
          <!--数组-->
          <KeepAlive :include="['a', 'b']">
             <component :is="view" />
          </KeepAlive>
          <!--限制最大缓存数为10-->
          <KeepAlive :max="10">
             <component :is="view" />
          </KeepAlive>
          
          1. 组件
        3. 局部作用域
          1.
  4. Service Workers
    1. 场景:为了实现离线体验或加载提速,sw可以用来缓存应用的核心文件和数据
    2. 实现:Service Worker API 拦截请求并提供自定义的响应,从缓存中提供文件

1.2 缓存管理器

应用中设计一个缓存管理器,用来统一管理缓存的写入、读取和销毁等

  1. 步骤
    Step 1:确定缓存类型,如静态资源、API 响应数据、应用程序状态等
    Step 2:缓存策略,包括规则(何时缓存数据、何时更新、何时过期)和机制(决定使用哪种存储机制,如 LocalStorage、IndexedDB、内存、Service Workers 等)
    Step 3

2. 浏览器缓存

2.1 基本介绍

浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存,以便下一次访问时重复使用,节省带宽,提高访问速度,降低服务器压力

1.2

### 前端缓存实现机制与浏览器 Cache 存储 #### 浏览器缓存概述 浏览器缓存是一种优化技术,旨在减少网络请求次数并加快页面加载速度。它通过将静态资源(如 HTML 文件、CSS 样式表、JavaScript 脚本和图片等)存储在客户端设备上来实现这一目标。这些资源可以分为两种主要类型的缓存:`Memory Cache` 和 `Disk Cache`。 - **Memory Cache (内存缓存)** 内存缓存是临时性的缓存形式,在浏览器运行期间有效。当用户关闭或重启浏览器时,内存中的缓存会自动清除[^1]。由于其快速访问特性,适合频繁使用的资源,例如动态生成的内容或其他短期需求的数据。 - **Disk Cache (磁盘缓存)** 磁盘缓存则持久化于用户的硬盘中,即使退出浏览器进程也不会丢失。这种缓存通常适用于长期有效的文件,比如 CSS 样式表、JS 脚本以及图像等非脚本类资源。 两者共同构成了浏览器的本地缓存体系结构,帮助提升用户体验的同时也减轻服务器负载压力。 #### 控制缓存的行为——响应头的作用 为了更精细地管理哪些资源应该被缓存及其有效期等问题,HTTP 协议引入了一系列专门用于描述缓存策略的头部字段,其中包括但不限于以下几个重要参数: - **Cache-Control**: 这是一个核心指令集,允许开发者定义具体的缓存规则。例如,“no-store”表示完全禁用任何种类的缓存;而“no-cache”,尽管名字里含有“cache”,实际上并不意味着阻止缓存行为的发生,而是指示每次都需要向源服务器验证内容的新鲜度后再决定是否使用已有的副本][^[^23]。 以下是基于不同场景下可能应用到的一些典型配置实例: ```http // 不允许任何形式的缓存 Cache-Control: no-store, must-revalidate // 只能在私密环境下缓存(如单个用户的浏览历史), 并且最大存活时间为一天秒数单位 Cache-Control: private, max-age=86400 // 强制每次都去原地址重新获取最新版本而不依赖现有记录 Cache-Control: no-cache ``` 另外值得注意的是除了上述提到过的强制性措施外还有其他一些补充选项可供选择,像public/private区分公开还是个人专属范围内的可共享程度设定等等都可以借助此属性完成相应调整工作。 #### 清理缓存的方法 随着项目迭代升级或者修复Bug等原因可能导致旧版资产仍然残留影响新功能展示效果因此适时执行必要的清理动作就显得尤为重要了。具体做法可以从两个方面入手考虑: 一方面是从代码层面出发主动触发刷新逻辑;另一方面也可以引导最终使用者手动干预解决办法如下所示: 对于前者而言可以通过修改文件名附加时间戳等方式达到目的样例演示如下: ```javascript <link rel="stylesheet" href="/styles.css?v=<%= new Date().getTime() %>"> <script src="/app.js?version=<%= process.env.VERSION || 'latest' %>" ></script> ``` 这样做的好处在于无需更改实际物理路径却能确保每一次部署都能带来全新的体验感受因为查询字符串部分已经发生了变化所以必然会引起新的下载过程发生. 至于后者则是简单粗暴直接告知相关人员按照常规步骤操作即可即打开设置菜单找到关于隐私保护方面的子项然后勾选删除浏览数据当中有关Cookies及其他网站跟踪信息的部分最后确认提交命令结束整个流程.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值