keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。
作用:
在组件切换过程中 把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。
Keep-alive 组件提供了 include 和 exclude 两个属性,允许组件有条件的进行缓存:
(1) include: 字符串或正则表达式。只有匹配的组件会被缓存。
(2) exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。
(3) max - 数字。最多可以缓存多少组件实例
原理:
Vue 的缓存机制并不是直接存储 DOM 结构,而是将 DOM 节点抽象成了一个个 VNode节点,因此,Vue 的 keep-alive 缓存也是基于 VNode节点 而不是直接存储 DOM 节点。
生命周期:
被包含在 keep-alive 中创建的组件,会多出两个生命周期的钩子:
activated(组件激活时使用) 与 deactivated(组件离开时调用);