当Angularjs中的数据绑定时,
之间是否存在性能差异(显着或其他) <div>{{bar}}</div>
和
<div>{{foo.bar}}</div>
?
<div>{{foo.bar.baz.qux}}</div>
怎么样?
背景信息:我正在一个团队中构建一个大型Angularjs应用程序,该应用程序可能会有大量数据流过它,如果有的话,我们希望避免性能损失。
答案 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