虽然很粗俗不高大上,但是应该很容易懂啊哈哈~
什么是虚拟dom?
虚拟Dom是一个js对象,它保存了生成真实dom的一些属性。可以理解成是dom树的js描述或者js版本的dom元素。如果直接操作dom,开销是很大的。虚拟dom的问世,让我们可以直接操作js,将它替换渲染成真实dom。毕竟才做js的成本远小于操作真实dom。所以像vue、react这种框架都采用了虚拟dom来更新视图,内部封装diff算法。将虚拟dom发扬光大,奥里给~
vue中虚拟dom的生成过程?
vue中通过模板描述状态与视图之间的映射关系,它会先将模板编译成渲染函数,执行渲染函数生成虚拟dom,使用虚拟dom生成真实dom元素,插入页面渲染视图
vue中的虚拟dom和有哪些类型?
在Vue.js 中虚拟 DOM 的 JavaScript 对象就是 VNode。
vnode有很多种不同的类型,
(1)注释节点
(2)文本节点
(3)元素节点
(4)组件节点
(5)函数式节点
(6)克隆节点
什么是新旧虚拟dom?
因为每次渲染视图都要先创建vnode, 然后使用它创建真实dom插入到页面中。所以将上一次渲染视图时创建的vnode缓存起来,这个缓存的vnode就是oldVnode。
新创建的,需要被渲染的vnode就是newVnode
什么是patch算法(diff算法,vue中叫patch)?
比较新旧两个vnode之间有哪些不同,根据对比结果找出实际需要更新的节点进行更新,最终渲染成真实dom。
patch的过程:创建节点、删除节点、修改节点
注意:比较只是patch的一部分,它最终的目的是渲染新视图(更改数据后的视图)
为什么需要patch算法?
极大的减少dom操作,提升性能!
想想一下,如果没有diff算法,那我们改变数据时就需要将整个dom结构全都删除并且重新渲染。明明只改变了一个文本,点击了一下按钮(比如异步操作),却要整个页面刷新重新渲染?那代价也太大了,不会被喷死才怪嘞。
暂存~