reactjs vdom终于更新dom了(在diff之后)任何dom的改变都应该触发整个树的重绘和回流,那么vdom有什么用呢?

zpjtge22  于 2022-12-22  发布在  React
关注(0)|答案(1)|浏览(136)

这个问题被问了很多次,每当我们改变一个领域,像
方法一:
文档. getElementByID('根')="您好";即使改变了一个dom元素,浏览器也会重新呈现整个dom,其他元素的状态(如输入文本框)也会丢失,并重新计算样式和布局(. ie回流和重画)。
方法二:
react做的是保留一个虚拟dom,它是真实dom的拷贝,每当状态改变时,它在内存中重新渲染整个新的vdom,并进行比较,识别哪些节点需要在真实dom中更新,react只更新真实dom中的那一部分,从而节省时间,而不是重新渲染整个dom。
我的问题是在一天结束的时候,我们要么使用方法1更新realdom,要么使用vdom,最后dom被更新了,这反过来又会使浏览器再次计算整个布局和样式,为什么人们说只更新UI的一部分会有帮助?

    • 请不要回答相同的差异化概念、vdom概念、更新所需部件概念或重画和回流工艺,即dom树、css树和渲染引擎等...**
  • #我的问题是vdom是如何停止浏览器重画和回流时,最终dom得到更新,从而使回流和重画整个树?*

关于我想问的问题的图片:

忽略我的语法,纠正我在dom,vdom,repaint和reflow概念上的错误。

kkbh8khc

kkbh8khc1#

与编写良好的DOM操作相比,VDom通常不会为您保存任何重画/重排。
它的主要好处是它允许声明性组件API。您描述组件是什么,React会找出如何高效地呈现它,而无需重新生成无关的DOM元素。使用这种方法,html更改通常会较小。
这里的性能优势有点像转移注意力。是的,Reacts vdom有一些优化,比如批处理渲染,但这些是针对vdom的优化,而不是针对浏览器的优化。浏览器DOM操作已经非常快了。

相关问题