AngularJS - 为什么ng-bind比表达式更快?

day*_*oli 11 performance angularjs ng-bind

这个问题这个答案,似乎使用表达式将导致每次从头开始评估值.但是我搜索了文档和教程,但是我没有找到这个声明的参考.

在我看来,两者都包含在一个中$watch(),所以当$digest()循环运行时,它将看到内部的值ng-bind或是否{{}}已经改变.

在表现上,为什么ng-bind{{}}建议更好,哪里是参考?

Mat*_*nen 15

这样的细节并不总是在文档中提供 - 您必须阅读源代码.我看了一眼,看来(截至2014-11-24)他们都以非常相似的方式工作.两者都会导致单个指令被实例化以在需要时更改值(卷动插值指令是动态生成的).

这两个指令都会$digest像其他所有内容一样评估所涉及的表达式.主要区别在于,虽然ng-bind不对值进行任何进一步处理,但使用curlies时,会在每个摘要上重新计算整个插值文本.本质上是一个字符串是使用构建的,$interpolate并与之前的值进行比较(这发生在内部$digest).如果值(ng-bind带有curlies 的普通值或带有curlies的插值结果)没有改变,那么这两种方法都不会更新DOM .

对我来说,在这个问题上接受的答案是一个更有说服力的理由ng-bind,即你可以使用它来防止在Angular加载和编译它们之前模板标签的可见闪光,而不是诉诸像ng-cloak这样的黑客.

根据变量,可能还存在卷曲插值实际上高效的情况.我可以想到的一种情况是,当使用ng-bind而不是插值时,需要创建许多其他冗余<span>元素,并在另一个方向上提示缩放.插值表达式还会导致为整个字符串创建单个观察程序,而与您使用的变量数量无关,而ng-bind则为每个实例创建一个观察程序.

但是,与往常一样,不要尽早优化性能,如果你这样做,请进行分析以找出真正重要的部分.