问题
虽然我的应用程序中的$digest-cycle仍然运行得相当快,但我注意到一些回调(例如通过ng-if绑定在模板中)被调用的频率比我预期的要高。这涉及到单个UI交互上的100+调用(通常我预计最多会有3到10个调用)。
我想了解为什么经常调用回调,并可能减少调用的次数,以防止将来出现性能问题。
我试过什么
根据我的理解,所描述的行为意味着$digest-cycle需要多达几百个循环来删除所有脏标志,并确保所有呈现的节点都是最新的。
我简化了几个回调,只返回true,而不是计算一些模型值,这些值对$digest调用的数量没有任何影响。我还检查了Chrome中的性能选项卡,这些工具只告诉我调用本身是在几毫秒内执行的。
为了解决问题,我还在整个应用程序中删除了几个ng-repeat块和angular-filters,因为这些块显然应用了几个要在$digest循环中评估的表。这对回调函数的调用次数也没有影响。
因此,我想我需要一个更复杂的工具或方法来调试整个应用程序中的(数量) $digest调用,甚至可以找出所有这些调用来自何处,以及如何减少这些调用。
问题
在我的角度应用程序中,我可以使用哪些工具和方法来评估$摘要循环的性能(特别是循环的数量)?
如何减少模板中绑定的对回调的调用数?
我认为,要回答第二个问题,了解在这样的设置中会导致对foo()的额外调用的原因已经很有帮助了:
<div ng-if="ctrl.foo()">
<!--<span>content</span> -->
</div>发布于 2017-01-17 15:19:06
首先,在angularJS中消化循环实际上是什么?
1.的过程中,角度框架检查所有的双向绑定变量不断变化。
2.当用户交互并更改双向绑定变量时,就会被触发。
3.以编程方式(在控制器、服务或工厂中)更改双向绑定变量
以上是触发消化循环呼叫的理由..。
哪个实体是消化周期的一部分?
1.在变量上添加 $watch。
2. ngModel,ng模型
基本上是$watch函数。
我们可以做些什么来避免$文摘/避免调用$watch?
1. RX js is right now best library which can help to overcome this issue. Its just one option.
2. Use getter setterHow?
mymodule.controlle('ctrName',ctrClass);ctrClass {构造函数($scope){ this.myVar1 = null;this.myVar2 = null;} set myVar1(值){/我希望在值设置为this.afterSet()之后执行的代码;返回this.myVar1 = value;} afterSet() {}}
关于工具:
验证角度应用是一个很好的工具。
https://stackoverflow.com/questions/41699681
复制相似问题