2022/12/12 vue-virtual Dom

60 阅读1分钟

当我们改变data中的数据时,我们可以从控制台的元素中观察到,页面中仅更新了data改变的那一部分,而不是重新渲染整个页面。 image.png 这是怎么做到的呢?

我们很快能想到,通过比较新的dom和旧的dom,就可以找出他们的不同,然后只更新不同的地方。 但这样我们仍需要先遍历整个dom,这也是很耗性能的,因为浏览器的dom实在太庞大了。

让我们打印一下挂载了vue实例的整个div的真实dom对象,当然整个截图只是很少的一部分,还有一部分屏幕放不下了。。。 image.png 但其实很多属性,我们不会常用到,甚至是没有用的,所以就有了virtual DOM。

virtual Dom就是一个js对象,结构化的表示真实dom,但是它在真实dom的基础上省略了很多不重要的属性。我们可以通过元素的__vue__的_vnode看到vue为这个dom创建虚拟节点。

image.png vue做了这样一个操作,当data改变时,会创建一个新的virtual Dom,然后将新的virtual Dom和旧的virtual Dom进行比较,得到的不同再更新到真实dom中。