面试题答案
一键面试Vue Keep - Alive组件结合虚拟DOM提升渲染性能的原理
- 虚拟DOM的优势:
- 虚拟DOM是JavaScript对象,以树形结构描述真实DOM。当数据变化时,Vue先在虚拟DOM上进行计算,对比新旧虚拟DOM树的差异。
- 这种对比操作在JavaScript层面进行,比直接操作真实DOM快得多,因为真实DOM操作开销大,涉及浏览器重排与重绘。
- Keep - Alive组件作用:
- Keep - Alive组件的主要功能是缓存不活动的组件实例,而不是销毁它们。当组件被Keep - Alive包裹时,在切换过程中,组件不会被销毁重建。
- 结合虚拟DOM,在组件切换回缓存的组件时,由于组件实例被缓存,虚拟DOM无需重新创建全新的树来描述该组件,只需复用之前缓存的虚拟DOM相关状态(比如节点的属性、事件绑定等信息)。这就避免了大量重复的虚拟DOM创建和对比过程,直接复用缓存的状态,从而大大提升了渲染性能。
Keep - Alive的生命周期钩子及其作用
- activated:
- 触发时机:当被Keep - Alive缓存的组件被激活(进入页面可视区域)时触发。
- 作用:在此钩子函数中,可以执行需要在组件每次激活时进行的操作,例如重新获取数据(如果数据可能已过期)、重新绑定事件等。因为组件只是被缓存,并非重新创建,所以一些需要初始化的操作(但又不是首次创建时才执行的操作)可以放在这里。
- deactivated:
- 触发时机:当被Keep - Alive缓存的组件停用时(离开页面可视区域)触发。
- 作用:可以在此处执行一些清理操作,例如取消定时器、解绑一些不必要的事件监听器等。防止在组件缓存期间,这些未清理的操作继续占用资源,影响性能。