angular.equals()占用执行时间的50%

时间:2017-02-02 10:20:58

标签: javascript angularjs optimization google-chrome-devtools

正如大多数人在他们的AngularJS职业生涯中所做的那样,我在我的应用程序中遇到了性能瓶颈,并且我一直在使用Chrome中的分析器来试图找出原因。

就在旁边;我已经完成了我认为对AngularJS应用程序的正常优化,我没有过多的观察者[~300]。但我会使用Angular Google Maps和Angular Material。

Profiler中出现的主要内容是AngularJS中名为equals的函数占用了50%的时间。有趣的是,虽然我没有在我的代码中使用angular.equals所以我希望它有一些内部的Angular流程(摘要周期?)或外部库 - 尽管我已经检查了大多数大型库中的源代码我使用并且他们谨慎地使用.equals()

任何人都可以给我一些提示,看看在哪里查看或查看什么类型的代码,以找出造成这些过度平等检查的原因?

enter image description here

1 个答案:

答案 0 :(得分:5)

当堆栈跟踪显示时,equals()正在从$digest递归调用,当它评估所有观察者时。

当您使用angular.equals()选项时,观察者将使用objectEquality,如documentation中所示:

  

objectEquality == true时,根据watchExpression函数确定angular.equals的不等式。要保存对象的值以供以后比较,请使用angular.copy函数。 因此,这意味着观看复杂对象会产生不良的记忆和性能影响。

所以我想说最简单的答案是使用较少的观察者或更谨慎地使用objectEquality选项。