首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少对角$摘要周期的调用

如何减少对角$摘要周期的调用
EN

Stack Overflow用户
提问于 2017-01-17 14:27:52
回答 1查看 785关注 0票数 2

问题

虽然我的应用程序中的$digest-cycle仍然运行得相当快,但我注意到一些回调(例如通过ng-if绑定在模板中)被调用的频率比我预期的要高。这涉及到单个UI交互上的100+调用(通常我预计最多会有3到10个调用)。

我想了解为什么经常调用回调,并可能减少调用的次数,以防止将来出现性能问题。

我试过什么

根据我的理解,所描述的行为意味着$digest-cycle需要多达几百个循环来删除所有脏标志,并确保所有呈现的节点都是最新的。

我简化了几个回调,只返回true,而不是计算一些模型值,这些值对$digest调用的数量没有任何影响。我还检查了Chrome中的性能选项卡,这些工具只告诉我调用本身是在几毫秒内执行的。

为了解决问题,我还在整个应用程序中删除了几个ng-repeat块和angular-filters,因为这些块显然应用了几个要在$digest循环中评估的表。这对回调函数的调用次数也没有影响。

因此,我想我需要一个更复杂的工具或方法来调试整个应用程序中的(数量) $digest调用,甚至可以找出所有这些调用来自何处,以及如何减少这些调用。

问题

在我的角度应用程序中,我可以使用哪些工具和方法来评估$摘要循环的性能(特别是循环的数量)?

如何减少模板中绑定的对回调的调用数?

我认为,要回答第二个问题,了解在这样的设置中会导致对foo()的额外调用的原因已经很有帮助了:

代码语言:javascript
复制
<div ng-if="ctrl.foo()">
    <!--<span>content</span> -->
</div>
EN

回答 1

Stack Overflow用户

发布于 2017-01-17 15:19:06

首先,在angularJS中消化循环实际上是什么?

1.的过程中,角度框架检查所有的双向绑定变量不断变化。

2.当用户交互并更改双向绑定变量时,就会被触发。

3.以编程方式(在控制器、服务或工厂中)更改双向绑定变量

以上是触发消化循环呼叫的理由..。

哪个实体是消化周期的一部分?

1.在变量上添加 $watch。

2. ngModel,ng模型

基本上是$watch函数。

我们可以做些什么来避免$文摘/避免调用$watch?

  1. 想想UI中使用的变量,这个变量需要双向绑定吗?如果答案是NO,那么就采用单向绑定语法。
  2. 避免使用控制器,服务,工厂的手表功能,然后我怎么看它.
代码语言:javascript
复制
1. RX js is right now best library which can help to overcome this issue. Its just one option.
2. Use getter setter

How?

mymodule.controlle('ctrName',ctrClass);ctrClass {构造函数($scope){ this.myVar1 = null;this.myVar2 = null;} set myVar1(值){/我希望在值设置为this.afterSet()之后执行的代码;返回this.myVar1 = value;} afterSet() {}}

  1. 利用角的controllerAs特征
  2. 使用隔离作用域创建指令

关于工具:

验证角度应用是一个很好的工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41699681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档