Reactjs 虚拟DOM比真实DOM快多少?

Reactjs 虚拟DOM比真实DOM快多少?,reactjs,Reactjs,我知道VDOM只是真实DOM的表示,当某些节点发生变化时,它与以前的VDOM不同。但归根结底,真正的DOM将获得这个输出,重新绘制屏幕,据说它很愚蠢,不知道如何只改变屏幕的一部分。我想知道浏览器或真正的DOM如何区分我现在处理的VDOM和一些常规的东西 我想知道浏览器或真正的DOM如何区分我现在处理的VDOM和一些常规的东西 当您实际调用DOM对象节点、元素等上的方法时,浏览器知道您正在做一些DOM工作 DOM对象与代码中可能存在的任何虚拟DOM完全分离,并且对其一无所知。虚拟DOM实际上只是一

我知道VDOM只是真实DOM的表示,当某些节点发生变化时,它与以前的VDOM不同。但归根结底,真正的DOM将获得这个输出,重新绘制屏幕,据说它很愚蠢,不知道如何只改变屏幕的一部分。我想知道浏览器或真正的DOM如何区分我现在处理的VDOM和一些常规的东西

我想知道浏览器或真正的DOM如何区分我现在处理的VDOM和一些常规的东西

当您实际调用DOM对象节点、元素等上的方法时,浏览器知道您正在做一些DOM工作

DOM对象与代码中可能存在的任何虚拟DOM完全分离,并且对其一无所知。虚拟DOM实际上只是一个常规JavaScript对象的图形。这些物体没有什么特别之处。我们知道,它们应该代表DOM文档的一部分,但浏览器对此毫不在意;对它来说,它只是物体

区分两个虚拟DOM实例意味着找到两个对象图中的差异。同样,从浏览器的角度,或者更一般地说,从JavaScript执行环境的角度来看,它与区分任何其他两个JavaScript对象没有什么不同

产生的差异需要转换为DOM API调用。这时,浏览器会意识到您正在对DOM执行某些操作,这可能需要在屏幕上对文档进行回流和重新绘制

虚拟DOM比真实DOM快多少

虚拟DOM本身没有任何速度。它既不比DOM慢,也不比DOM快。它只是一个物体。修改虚拟DOM对象图应该比修改DOM对象更快,因为它不会立即自动触发回流和重新绘制,因此您可以将虚拟DOM用作暂存区域,以便准备DOM的某些未来状态。然后,在准备就绪后,使用diffing查找自上次以来对虚拟DOM所做的全部更改中需要应用于DOM的最小更改数

PS:如果你在寻找原始速度,那么当前框架中使用的虚拟DOM、Vue.js等并不是你最快的选择。看看你是否好奇

我想知道浏览器或真正的DOM如何区分我现在处理的VDOM和一些常规的东西

当您实际调用DOM对象节点、元素等上的方法时,浏览器知道您正在做一些DOM工作

DOM对象与代码中可能存在的任何虚拟DOM完全分离,并且对其一无所知。虚拟DOM实际上只是一个常规JavaScript对象的图形。这些物体没有什么特别之处。我们知道,它们应该代表DOM文档的一部分,但浏览器对此毫不在意;对它来说,它只是物体

区分两个虚拟DOM实例意味着找到两个对象图中的差异。同样,从浏览器的角度,或者更一般地说,从JavaScript执行环境的角度来看,它与区分任何其他两个JavaScript对象没有什么不同

产生的差异需要转换为DOM API调用。这时,浏览器会意识到您正在对DOM执行某些操作,这可能需要在屏幕上对文档进行回流和重新绘制

虚拟DOM比真实DOM快多少

虚拟DOM本身没有任何速度。它既不比DOM慢,也不比DOM快。它只是一个物体。修改虚拟DOM对象图应该比修改DOM对象更快,因为它不会立即自动触发回流和重新绘制,因此您可以将虚拟DOM用作暂存区域,以便准备DOM的某些未来状态。然后,在准备就绪后,使用diffing查找自上次以来对虚拟DOM所做的全部更改中需要应用于DOM的最小更改数


PS:如果你在寻找原始速度,那么当前框架中使用的虚拟DOM、Vue.js等并不是你最快的选择。看看你是否好奇。

VDOM的全部目的是尽量减少DOM中缓慢的更改数量。事实并非如此。如果你看一下Stefan Krause的例子,最快的实现往往是香草JS,没有框架,没有虚拟DOM。VDOM的全部目的是最小化DOM中缓慢的更改数量。事实并非如此。如果你看看Stefan Krause的,最快的实现往往是香草JS,没有框架,没有虚拟DOMI看过Rich的演讲,这引发了我的思考。我还是不明白。假设您单击了一个按钮,导致其文本从“单击我”变为“单击”,在VDOM执行所有操作后,它将调用button.textContent或类似的东西,如果没有VDOM,情况也会如此,我只想知道这两个相同的调用之间的区别
o domapi。如果是这种情况,VDOM实际上是一种开销。除了操纵实际的DOM之外,没有什么会将按钮的标签从click me更改为click me。虚拟DOM本身不起任何作用,它是一种惰性数据结构,用于描述DOM的当前和/或未来状态。因此,它的工作是帮助框架在实际操作之前确定要接触DOM的哪些部分。所有这些背后的主要假设是,访问常规JavaScript对象(如虚拟DOM中的对象)比访问DOM对象便宜。。。也许不是只读访问,但肯定是修改。我看了Rich的演讲,引发了我的思考。我还是不明白。假设您单击了一个按钮,导致其文本从“单击我”变为“单击”,在VDOM执行所有操作后,它将调用button.textContentor或类似的东西,如果没有VDOM,情况也会如此,我只想知道这两个相同的DOM api调用之间的区别。如果是这种情况,VDOM实际上是一种开销。除了操纵实际的DOM之外,没有什么会将按钮的标签从click me更改为click me。虚拟DOM本身不起任何作用,它是一种惰性数据结构,用于描述DOM的当前和/或未来状态。因此,它的工作是帮助框架在实际操作之前确定要接触DOM的哪些部分。所有这些背后的主要假设是,访问常规JavaScript对象(如虚拟DOM中的对象)比访问DOM对象便宜。。。对于只读访问来说,可能没有那么多,但对于修改来说,肯定是这样。