在AngularJs中,如果在多个地方使用相同的变量进行数据绑定,是否会导致每个$ digest-cycle对此变量进行多次脏检查?
我想从模板中的范围打印变量,但应用程序对性能非常敏感。假设模板包含以下内容:
<div>{{variableInScope}}</div>
<span class="{{variableInScope}}">We print {{variableInScope}} a lot!</span>
<span class="{{variableInScope}}">We print {{variableInScope}} again!</span>
... snip ~100 lines ...
</div>
这会导致每个$ digest周期检查变量variableInScope
一次还是200次?
上面的代码只是一个例子来说明这个问题。我正在构建一个数据网格,我不能使用NG-repeat,因为它设置了一个很多的观察者,导致客户计算机上的摘要时间超过2秒。
NG网格在很多方面都很棒,但对于我们的用例,它有同样的问题:许多ng重复的方式,导致性能下降。我们确实需要将$ digest时间降至最低,因为页面其余部分的复杂性。
答案 0 :(得分:2)
在您的示例中,这些100多行中的每一行都没有监视variableInScope
。但是当值发生变化时,它将在每个实例中更新。如果那些是带有ngModel
的输入字段,则会有所不同。观看可能比更新DOM更激烈,但大多数观察者都是将当前值与旧值进行简单比较。
就多个观察者而言,基于观察者的复杂性,性能成本是线性的,除非观察者将改变该值。在这种情况下,它必须再次运行所有的观察者。
这是一个演示,用于显示使用所有{{variableInScope}}
调用观察者的所有时间。记录计数。您可以更改该值以查看计数更改。