2

概括:

在 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>

variableInScope这会导致每个 $digest 循环检查一次或 200 次变量吗?

“糟糕的代码!为什么不使用 NG-repeat?”

上面的代码只是说明问题的一个例子。我正在构建一个数据网格,但我不能使用 NG-repeat,因为它设置了很多观察者,导致客户计算机上的摘要时间超过 2 秒。

“只需使用 ng-grid!”

NG-grid 在很多方面都很棒,但对于我们的用例来说,它也有同样的问题:导致许多 ng-repeat 的方式,导致性能下降。由于页面其余部分的复杂性,我们确实需要将 $digest 时间降至最低。

4

1 回答 1

2

在您的示例中,variableInScope这 100 多行中的每一行都没有被监视。但是当值改变时,它会在每个实例中更新。如果这些是输入字段,ngModel那将是不同的。观察可能比更新 DOM 更激烈,但大多数观察者只是将当前值与旧值进行简单比较。

就多个观察者而言,性能成本基于观察者的复杂度是线性的,除非观察者会改变值。在这种情况下,它必须再次运行所有的观察者。

这是一个演示,显示了使用所有{{variableInScope}}s 调用观察者的所有时间。计数被记录。您可以更改值以查看计数更改。

http://jsfiddle.net/TheSharpieOne/VaeBJ/1/

于 2013-09-10T18:45:59.537 回答