当前位置:首页 > VUE

vue实现组件缓存原理

2026-02-25 07:51:58VUE

Vue 组件缓存原理

Vue 通过内置组件 <keep-alive> 实现组件缓存,其核心原理基于虚拟 DOM 和组件生命周期钩子管理。以下是关键实现机制:

缓存机制

<keep-alive> 通过 LRU(最近最少使用)算法缓存组件实例。默认缓存所有匹配的组件,可通过 include/exclude 属性或 max 属性控制缓存策略。

组件被缓存时,Vue 不会销毁其实例,而是将组件 DOM 节点保存在内存中。当再次激活时,直接从缓存中读取 DOM 结构和数据状态。

生命周期钩子

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

  • activated:组件被激活时调用(从缓存恢复)
  • deactivated:组件被停用时调用(进入缓存)

原始钩子如 created/mounted 仅在首次加载时触发,而 activated 会在每次从缓存恢复时触发。

实现代码示例

// 伪代码展示核心逻辑
const KeepAlive = {
  render() {
    const vnode = this.$slots.default[0];
    const key = vnode.key;
    if (this.cache[key]) {
      vnode.componentInstance = this.cache[key].componentInstance;
    } else {
      this.cache[key] = vnode;
    }
    vnode.data.keepAlive = true;
    return vnode;
  }
};

关键步骤

虚拟 DOM 比对时会检查 data.keepAlive 标记。若存在,则复用缓存的组件实例而非创建新实例。

缓存组件时,Vue 会调用 deactivateChildComponent 方法将实例从父链中解除;激活时通过 activateChildComponent 重新建立联系。

性能优化

通过 max 属性限制缓存数量,避免内存过度占用。超出限制时,LRU 算法会销毁最久未使用的组件实例。

vue实现组件缓存原理

组件切换时,直接复用缓存的 VNode 和 DOM 节点,避免重复渲染和 patch 过程,显著提升性能。

标签: 缓存组件
分享给朋友:

相关文章

vue抽屉组件实现

vue抽屉组件实现

Vue 抽屉组件实现 使用 Element UI 实现 Element UI 提供了现成的抽屉组件 el-drawer,可以快速实现抽屉效果。 安装 Element UI: npm install…

vue实现秒表组件

vue实现秒表组件

实现秒表组件的基本思路 使用Vue实现秒表组件需要管理时间状态、控制计时器的启动/暂停/重置功能,并通过计算属性动态显示格式化时间。核心逻辑包括利用setInterval更新计时数据,并通过生命周期钩…

vue实现父子组件

vue实现父子组件

Vue 父子组件通信实现方式 1. 父组件向子组件传递数据(Props) 父组件通过 props 向子组件传递数据,子组件通过 props 接收数据。 父组件模板: <template>…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pa…

vue实现search组件

vue实现search组件

Vue 实现搜索组件 基础实现 创建一个基础的搜索组件需要包含输入框和搜索逻辑。以下是一个简单的实现示例: <template> <div class="search-cont…

vue实现拖拽组件

vue实现拖拽组件

Vue 实现拖拽组件的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…