AngularJs替代ng保存摘要

AngularJs替代ng保存摘要,angularjs,performance,digest,Angularjs,Performance,Digest,我最近开始研究AngulaJs的摘要和性能改进,在我的网站上发现我正在使用大量的ng if 有时在ng if中,有一个变量可能会改变,但通常在控制器启动时固定不变,然后再也不会改变 为了提高性能,我应该做些什么来避免对每个循环进行评估,这些循环是不可更改的ng if?我应该改变指令吗?用什么 例如 在我的头模板中,我有一个div,只有特定类型的用户才能看到它。它只是一个div,所以我不想调用其他模板。 我把 当第一次求值时,userIsSuperior()的返回值永远不会改变(当然在这个会话期间

我最近开始研究AngulaJs的摘要和性能改进,在我的网站上发现我正在使用大量的
ng if

有时在
ng if
中,有一个变量可能会改变,但通常在控制器启动时固定不变,然后再也不会改变

为了提高性能,我应该做些什么来避免对每个循环进行评估,这些循环是不可更改的
ng if
?我应该改变指令吗?用什么

例如

在我的头模板中,我有一个div,只有特定类型的用户才能看到它。它只是一个div,所以我不想调用其他模板。 我把

当第一次求值时,
userIsSuperior()
的返回值永远不会改变(当然在这个会话期间),但我知道AngularJs Digest会在每个循环中求值。
我怎样才能避免这种情况?还是我遗漏了什么?

我想你要找的是

如果您使用:

<div ng-if="::userIsSuperior()"> ... </div>
。。。
然后,
userIsSuperior()
的值将只计算一次,并将保持该值不变


请参阅。

第一答案解决方案需要AngularJS>2

在使用OnceJS库进行一次性绑定时,我找到了一个有效的解决方案


如果没有具体的例子,很难回答。我得到了很多,大多数控制器中的函数根据一些计算返回true或false(如果网站提高,可能会变得非常昂贵),还有一些仅使用一个变量。有一点是,设置范围模型属性总是比在视图中使用函数(如
userIsSuperior()
)更好。在Digest期间节省了大量不必要的函数调用。我会说您需要更关注的区域在
ng repeat
中。在循环中有大量的
ng if
,比担心单个独立元素会堆积更多的观察者