当前位置:首页 > VUE

vue缓存实现原理

2026-03-09 06:48:49VUE

Vue 缓存实现原理

Vue 中的缓存主要通过 keep-alive 组件实现,用于缓存动态组件或路由组件,避免重复渲染和销毁,提升性能。

核心机制

keep-alive 是一个抽象组件,不会渲染成 DOM 元素,而是通过插槽(slot)管理子组件。其缓存机制基于以下关键点:

  1. LRU 缓存策略
    keep-alive 使用 LRU(最近最少使用)算法管理缓存。当缓存数量超过 max 属性设置的值时,最久未使用的实例会被销毁。

  2. 组件实例缓存
    被缓存的组件实例会存储在 cache 对象中,以组件的 nametag 作为键,避免重复创建和销毁。

  3. 生命周期钩子
    缓存组件会触发特定的生命周期钩子:

    vue缓存实现原理

    • activated:组件被激活时调用(从缓存中重新插入 DOM)。
    • deactivated:组件被停用时调用(移出 DOM 但保留在缓存中)。

实现细节

  1. 缓存标识
    通过组件的 nametag 生成唯一标识,确保同一组件的多个实例能正确缓存。

    const key = vnode.key ?? vnode.type.name;
  2. 缓存存储
    缓存的组件实例存储在 cache 对象中,并通过 keys 数组维护访问顺序。

    const cache = new Map();
    const keys = new Set();
  3. 渲染逻辑

    vue缓存实现原理

    • 首次渲染时,将组件实例存入 cache
    • 再次渲染时,直接从 cache 中读取实例,避免重新创建。
    if (cachedVNode) {
      // 从缓存中恢复实例
      vnode.component = cachedVNode.component;
    }
  4. LRU 更新
    每次访问缓存时,将对应的 key 移到 keys 数组末尾,确保最近使用的组件不被淘汰。

    keys.delete(key);
    keys.add(key);

使用示例

<template>
  <keep-alive :max="3">
    <component :is="currentComponent"></component>
  </keep-alive>
</template>

注意事项

  • 动态组件的 keyname 必须唯一,否则缓存可能失效。

  • 缓存过多可能导致内存占用过高,需合理设置 max 属性。

  • 嵌套路由需结合 router-view 使用:

    <keep-alive>
      <router-view v-slot="{ Component }">
        <component :is="Component" />
      </router-view>
    </keep-alive>

标签: 缓存原理
分享给朋友:

相关文章

eventbus实现原理vue

eventbus实现原理vue

EventBus 的实现原理(Vue) EventBus 是 Vue 中实现跨组件通信的一种简单机制,其核心原理基于发布-订阅模式(Pub-Sub)。以下是其实现的关键点: 核心机制 事件中心 E…

vue模版实现原理

vue模版实现原理

Vue 模板实现原理 Vue 的模板实现原理主要涉及模板编译、虚拟 DOM 和响应式系统三个核心部分。以下是详细解析: 模板编译 Vue 模板通过编译器将模板字符串转换为渲染函数。这一过程分为以下几…

vue cli实现原理

vue cli实现原理

Vue CLI 实现原理 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,其核心实现原理可以分为以下几个部分: 核心架构 Vue CLI 采用插件化架构,通过 @vue/cli 提…

vue实现页面缓存

vue实现页面缓存

使用 <keep-alive> 组件实现缓存 Vue 内置的 <keep-alive> 组件可以缓存动态组件或路由组件。通过包裹需要缓存的组件,可以保留其状态避免重复渲染。…

php购物车实现原理

php购物车实现原理

PHP 购物车实现原理 购物车是电子商务网站的核心功能之一,PHP 实现购物车功能主要依赖会话(Session)或数据库存储用户选择的商品信息。以下是常见的实现方式和技术要点: 基于 Session…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…