绑定到深层嵌套的对象属性时的Angularjs性能

时间:2014-04-11 05:02:27

标签: javascript performance angularjs data-binding

当Angularjs中的数据绑定时,

之间是否存在性能差异(显着或其他)

<div>{{bar}}</div>

<div>{{foo.bar}}</div>

<div>{{foo.bar.baz.qux}}</div>怎么样?

背景信息:我正在一个团队中构建一个大型Angularjs应用程序,该应用程序可能会有大量数据流过它,如果有的话,我们希望避免性能损失。

1 个答案:

答案 0 :(得分:2)

据我所知,重新评估发生在digest内。 如果值已更改,Angular将遍历范围中的所有值并检查。

看起来深度嵌套不会导致很多痛苦,因为它只是再次检查视图中使用的值。 (只要你不在这个深层嵌套对象上放置一个观察者)

但是有些提示

不要在视图中使用条件的方法:

<span data-ng-hide="someFunction()"></span>

该功能将在每个digest上执行,这可能会受到伤害。

不要在深层对象结构之上使用观察者: 将recursivly贯穿整个事情进行重新评估 - &gt;伤害

使用指令代替{{}}

为什么呢?示例: angular-translate : 如果为同一件事提供过滤器和指令。

<span>{{'WELCOME'|translate}}</span>
<span data-translate="'WELCOME'"></span>

将在每个digest上重新评估过滤器,而该指令在该传递的值上有一个观察者,并且只有在此代码确实发生变化时才重新评估。

使用 data-ng-if 代替 ng-Show/Hide(由于data-ng-if可用):

ng-Show/Hide只需使用带有css的display:none;即可消除DOM元素。 隐藏的DOM元素仍将被评估,数据也会发生变化,即使它不可见。

ng-if将完全删除DOM元素,不会对ng-if

中的内容进行重新评估