AngularJS – 6 Tips to Optimize the Digest Cycle

This article represents tips on making optimal usage of digest cycle which slowers the Angular app. Please feel free to comment/suggest if I missed to mention one or more important points. Also, sorry for the typos.

Following are the key points in relation with optimization of Digest cycle:

  • Only the most critical variables should be watched. For instance, one should avoid using $digest method in loop for every message exchanged.
  • Usage of one-time binding syntax to avoid objects being added to $$watchers list and thus being checked for updates with each $digest run. The syntax looks like {{::name}}. With this syntax, once the name variable is resolved, Angular removes the name property from the $$watchers list.
  • Usage of $scope.$apply vis-a-vis $scope.$digest: When $scope.$apply API is called, it triggers the whole app in the $digest loop which in trun runs $Scope.$digest(). This, in turn, traverses all scopes and bindings of the app looking for the change. One may, thus, want to use $scope.$digest in the local scope object if one is aware of the changes vis-a-vis scope.
  • Computations in $watch should be made as minimal as method.
  • Optimal usage of ng-repeat as it increases number of $$watchers. The thumb rule is that more $$watchers there are, more slower the app gets.
  • One should consider setting the third parameter in $timeout function to false to skip the $digest loop when no watched variables are impacted by the invocation of the $timeout callback function.
Ajitesh Kumar

Ajitesh Kumar

Ajitesh is passionate about various different technologies including programming languages such as Java/JEE, Javascript, PHP, .NET, C/C++, mobile programming languages etc and, computing fundamentals such as application security, cloud computing, API, mobile apps, google glass, big data etc.Recently, he has been digging deep into the field of data science and machine learning.

Follow him on Twitter and Google+.
Ajitesh Kumar

Leave A Reply

Time limit is exhausted. Please reload the CAPTCHA.