Angular:它与ReactJS的“和解”相同吗?

问题描述 投票:0回答:1

在阅读了有关ReactJS和Angular(而不是AngularJS)变更检测和渲染阶段的文档和一些文章之后,我提出了一个问题,我将在几分钟内尝试解释。

你可能已经读过React的文档(herehere),这个概念(如果你愿意的话)存在称为“Reconciliation”,它基本上是指“Diffing Algorithm”,以及在“render”方法之后执行的过程。调用并且创建了React元素的树,并且应该相应地更新DOM ...正如在文档中所说,React实现了一种启发式O(n)算法,该算法将新版本的虚拟DOM(VDOM)与之前的版本进行比较一,为了有效地只更新那些真正改变的视图部分。

但是在谈论Angular时,正如我在hereherehere这样的文章中所读到的,另一方面看起来像Angular,只看到它从模板中得到的“绑定”:

当编译器分析模板时,它标识与DOM元素关联的组件的属性。对于每个这样的关联,编译器以指令的形式创建绑定。绑定是Angular中变更检测的核心部分。

然后:

一旦创建了绑定,Angular就不再适用于模板。变更检测机制执行处理绑定的指令。这些指令的作用是检查具有组件属性的表达式的值是否已更改,并在必要时执行DOM更新。

所以把它包起来:

处理执行脏检查和更新DOM相关部分的绑定是Angular中变更检测的核心操作。

(来自第三个链接)

所以我的问题是,我们可以说当Angular仅在“绑定”而不是整个新生成的模板/ VDOM上运行变更检测时,它实现了与React类似的性能提升,因此无需优化的差异算法吗?

或者在Angular的变化检测中还有其他一点可以实现这种效率吗?

angular reactjs angular2-changedetection virtual-dom
1个回答
1
投票

我们可以说Angular实现了类似的性能提升......从而消除了对优化的差异算法的需求

React实际上并没有太多的优化。它只是比较返回的子元素的类型并丢弃树。与键的比较更加复杂。我会说Angular运行更快检测更快,因为所有的孩子在编译时都是已知的,但React更灵活,因为你每次都可以返回一个全新的孩子。在Angular中,您需要了解一大堆动态更改或删除子项的概念。在React中,只需要从render方法返回一个不同的孩子。

© www.soinside.com 2019 - 2024. All rights reserved.