当前位置:首页 > VUE

vue keep alive 实现

2026-03-29 06:29:02VUE

Vue Keep-Alive 实现原理

Vue 的 keep-alive 是一个内置组件,用于缓存不活动的组件实例,避免重复渲染和销毁。其核心实现基于组件的生命周期钩子和虚拟 DOM 的缓存机制。

基本用法

在 Vue 模板中包裹需要缓存的动态组件或路由视图:

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

或配合路由使用:

<keep-alive>
  <router-view></router-view>
</keep-alive>

缓存机制

keep-alive 通过以下方式实现缓存:

  1. LRU 缓存策略:默认缓存最近使用的组件实例,超出 max 限制时会销毁最久未使用的实例。
  2. 虚拟 DOM 比对:通过 key 标识缓存组件,相同 key 的组件会直接复用缓存实例。
  3. 生命周期管理:被缓存的组件会触发 activateddeactivated 钩子而非 destroyed

核心属性

  • include:字符串或正则,匹配名称的组件会被缓存。
  • exclude:字符串或正则,匹配名称的组件不会被缓存。
  • max:数字,限制最大缓存实例数。

示例:

<keep-alive :include="['ComponentA']" :max="5">
  <router-view/>
</keep-alive>

实现自定义缓存

可通过 cache 属性扩展缓存策略:

const customCache = {
  get(key) { /* ... */ },
  set(key, vnode) { /* ... */ },
  delete(key) { /* ... */ }
};

<keep-alive :cache="customCache">
  <component :is="view"/>
</keep-alive>

注意事项

  • 被缓存的组件需设置唯一 name 选项,否则 include/exclude 不生效。
  • 嵌套路由需要每个层级单独配置 keep-alive
  • 频繁切换的缓存组件可能引发内存问题,需合理设置 max

源码关键逻辑

Vue 内部通过 render 函数处理缓存:

vue keep alive 实现

render () {
  const vnode = getFirstComponentChild(this.$slots.default);
  const key = vnode.key;
  if (cache[key]) {
    vnode.componentInstance = cache[key].componentInstance;
  } else {
    cache[key] = vnode;
  }
  vnode.data.keepAlive = true;
  return vnode;
}

此实现确保了组件实例的复用而非重新创建。

标签: vuekeep
分享给朋友:

相关文章

vue实现autocomplete

vue实现autocomplete

Vue 实现 Autocomplete 功能 Vue 中实现 Autocomplete(自动完成)功能可以通过自定义组件或使用现有库完成。以下是几种常见方法: 方法一:使用 Vue 原生实现 创建…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景,…

vue app 实现

vue app 实现

Vue App 实现步骤 创建Vue项目 使用Vue CLI或Vite初始化项目。Vue CLI适合传统项目,Vite适合现代轻量级应用。 npm create vue@latest my-vu…

vue实现城市

vue实现城市

Vue 实现城市选择功能 使用 Element UI 的 Cascader 组件 Element UI 提供了一个 Cascader 级联选择器组件,非常适合实现城市选择功能。需要先安装 Elemen…

vue实现hexo

vue实现hexo

Vue 集成 Hexo 的实现方法 Hexo 是一个静态博客框架,而 Vue 是一个前端框架。将 Vue 集成到 Hexo 中可以通过以下方式实现: 在 Hexo 中使用 Vue 组件 通过 Hex…

vue实现dialog

vue实现dialog

Vue 实现 Dialog 的方法 使用 Vue 原生组件实现 Vue 可以通过组件化的方式实现 Dialog,以下是一个简单的实现示例: <template> <div>…