这个问题被问了很多次,每当我们改变一个领域,像
方法一:
文档. 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概念上的错误。
1条答案
按热度按时间kkbh8khc1#
与编写良好的DOM操作相比,VDom通常不会为您保存任何重画/重排。
它的主要好处是它允许声明性组件API。您描述组件是什么,React会找出如何高效地呈现它,而无需重新生成无关的DOM元素。使用这种方法,html更改通常会较小。
这里的性能优势有点像转移注意力。是的,Reacts vdom有一些优化,比如批处理渲染,但这些是针对vdom的优化,而不是针对浏览器的优化。浏览器DOM操作已经非常快了。