在阅读了有关ReactJS和change (而不是AngularJS)变化检测和呈现阶段的文档和几篇文章之后,我来到了一个问题,稍后我将尝试解释这个问题。
正如您在React的文档(这里和这里)中可能看到的那样,存在这样的概念(如果您愿意的话),称为“协调”,它基本上是指“Diffing算法”,以及在调用“render”方法和创建React元素树之后执行的过程,并应相应地更新DOM .正如他们在文档中所说的,React实现了一个启发式的O(n)算法,它将新版本的虚拟DOM (VDOM)与前一个版本进行比较,以便只有效地更新那些真正改变了的视图部分。
但是说到角,正如我在这里、这里和这里等一些文章中所读过的,另一方面,它似乎是有角度的,只看它从模板中派生出来的“绑定”:
当编译器分析模板时,它会识别与DOM元素关联的组件的属性。对于每个这样的关联,编译器以指令的形式创建绑定。绑定是角度变化检测的核心部分。
然后:
一旦创建绑定,角将不再与模板一起工作。变更检测机制执行处理绑定的指令。这些说明的任务是检查带有组件属性的表达式的值是否已更改,并在必要时执行DOM更新。
因此,结束它:
处理执行脏检查和更新DOM相关部分的绑定是角度变化检测的核心操作。
(从第三个链接)
因此,我的问题是,我们是否可以说,当角只在“绑定”而不是整个新生成的模板/VDOM上运行更改检测时,就能实现与React类似的性能提升,从而消除了优化的衍射算法的需要?
或者在角度变化检测中还有其他的点来实现这种效率?
发布于 2018-11-01 06:59:28
我们能不能说角可以达到类似的性能提升。从而消除了优化差分算法的需要。
是
实际上,没有多少优化在反应中进行。它简单地比较了返回子元素的类型,并丢弃了树。与键的比较涉及更多的it。我想说的是,角运行变化检测速度更快,因为所有的子程序在编译时都是已知的,但是由于每次都可以返回一个全新的子程序,所以它的反应更加灵活。从角度上讲,需要了解大量的概念才能动态地更改或删除子元素。在React中,这只是返回与render方法不同的子元素的问题。
https://stackoverflow.com/questions/53087567
复制相似问题