SlideShare a Scribd company logo
Performance
Angularjs
What is Angulars biggest
performance bottleneck?
The $digest cycle (a.k.a. dirty
checking)
How the $digest cycle works
When Angular (or you) calls $scope.$apply, this kicks off the $digest cycle.
$rootScope
$scope
$scope $scope.$apply
How the $digest cycle works
During the digest cycle, Angular will check every $scope for all Angular
bindings to see if any have changed.
$rootScope
$scope
ngBinding
ngBinding
$scope
ngBinding
Changed?
How the $digest cycle works
If any binding has changed, Angular will finish the current cycle and then start
the loop over again checking to see if the change affected other bindings.
$rootScope
$scope
ngBinding
ngBinding
$scope
ngBinding
Changed? Yes
Changed? No
Changed? No (restart cycle)
How the $digest cycle works
A $digest cycle will only complete when no Angular bindings have changed.
$rootScope
$scope
ngBinding
ngBinding
$scope
ngBinding
Changed? No
Changed? No
Changed? No ($digest completed)
How the $digest cycle works
This means that any change will cause the $digest cycle to run at least twice;
once to update the binding and again to ensure that no other bindings were
changed.
Example: If your app has 200 bindings, Angular will run at least 400 dirty
checks when a binding changes.
Improving $digest performance
● Reduce number of bindings
o use native DOM
o ng-if instead of ng-hide
o clean up $watchers when no longer needed
o avoid ng-repeat where possible
o avoid filters where possible
● Simplify logic in bindings
o use simple comparisons
o avoid binding to functions where possible
Use Native DOM
Just because you are using Angular as a framework does not mean you have
to do everything the “Angular” way.
One of the nice things about Angular is that you can choose when and when
not to use it.
If your DOM won’t change very often or only at certain, controllable times, you
can use native DOM manipulation instead of relying on Angular bindings.
Code Example
Use ng-if instead of ng-show
ng-show just hides the DOM using display:none; However, this keeps all the
bindings of the element and it’s children.
ng-if removes the DOM and all of it’s bindings.
caveat: ng-if manipulates the DOM, which can become more expensive if the
ng-if changes state a lot.
Clean up $watchers
Sometimes you only need to $watch for a change once and then no longer
need to watch for any changes anymore.
The $scope.$watch() function returns a function that you can use to remove the
watch binding.
var unWatch = $scope.$watch(‘contact’, function() {
// do some logic
unWatch(); // unbind watcher as no longer needed
});
Avoid ng-repeat
ng-repeat has some big performance problems, especially with large data sets.
ng-repeat adds lots of bindings to the DOM (1 for itself + n bindings inside the
repeat * num of items in collection)
<div ng-repeat=”item in list”>
<div>{{hello}} <span>{{goodbye}}</span></div>
</div>
bindings = (2 bindings * list length) + ng-repeat [list of 10 items = 21 bindings]
Avoid ng-repeat
Each of these bindings will be checked on every $digest, even if the list didn’t
change.
Even worse, when the list does change, it will manipulate the DOM, which
depending on what you are doing, can be expensive.
This is the exact same problem with filters.
Avoid filters
Filters will be run on every $digest, even if the binding attached to the filter
didn’t change.
Filters such as lowercase, date, and orderBy are bad because they will
transform the DOM at every $digest.
Instead, you can use the $filter provider and save the filtered result to be
displayed into the DOM.
Code Example
Use Simple Logic in Bindings
Because dirty-checking requires a comparison check of the old value to the
new value, the faster the comparison the faster the $digest cycle will run.
Comparisons to primitives and shallow equality of objects are the fastest.
Deep equality of objects are slow (so don’t do it).
Avoid Functions in Bindings
Functions in bindings are bad from a performance point of view.
A function inside a binding ( {{fn()}} ) will be called at every $digest (having
function call overhead).
A function inside an ng-repeat will be called for every item in the collection.
This doesn’t mean that functions inside ng-click are bad, since it will only be
called when the element is clicked on.
Avoid Functions in Bindings
Types of Functions:
● Just returns variable - get rid of the function and just use the variable
directly
● Performs some logic - try to pre-compute the logic once and then save the
result to be used in a binding

More Related Content

PDF
Angular Performance: Then, Now and the Future. Todd Motto
PDF
AngularJS - Overcoming performance issues. Limits.
PDF
Building scalable applications with angular js
PPTX
AngularJS Architecture
PPTX
Good karma: UX Patterns and Unit Testing in Angular with Karma
PPTX
Top 10 Mistakes AngularJS Developers Make
PDF
Building a Startup Stack with AngularJS
PPTX
Angularjs Anti-patterns
Angular Performance: Then, Now and the Future. Todd Motto
AngularJS - Overcoming performance issues. Limits.
Building scalable applications with angular js
AngularJS Architecture
Good karma: UX Patterns and Unit Testing in Angular with Karma
Top 10 Mistakes AngularJS Developers Make
Building a Startup Stack with AngularJS
Angularjs Anti-patterns

What's hot (20)

PDF
Advanced Tips & Tricks for using Angular JS
PDF
AngularJS Basics with Example
PPTX
AngularJs
PDF
Workshop 14: AngularJS Parte III
ODP
AngularJs Crash Course
PDF
Integrating Angular js & three.js
PDF
Patterns Are Good For Managers
PDF
Zenly - Reverse geocoding
PDF
Workshop 12: AngularJS Parte I
PPTX
AngularJS with TypeScript and Windows Azure Mobile Services
PPTX
Angularjs Basics
PDF
AngularJS Framework
PPTX
AngularJS Directives
PPTX
AngularJS Animations
PDF
AngularJS best-practices
PDF
AngularJS Deep Dives (NYC GDG Apr 2013)
PDF
React.js触ってみた 吉澤和香奈
PDF
Intro to Angular.JS Directives
PDF
AngularJS performance & production tips
PDF
The Art of AngularJS - DeRailed 2014
Advanced Tips & Tricks for using Angular JS
AngularJS Basics with Example
AngularJs
Workshop 14: AngularJS Parte III
AngularJs Crash Course
Integrating Angular js & three.js
Patterns Are Good For Managers
Zenly - Reverse geocoding
Workshop 12: AngularJS Parte I
AngularJS with TypeScript and Windows Azure Mobile Services
Angularjs Basics
AngularJS Framework
AngularJS Directives
AngularJS Animations
AngularJS best-practices
AngularJS Deep Dives (NYC GDG Apr 2013)
React.js触ってみた 吉澤和香奈
Intro to Angular.JS Directives
AngularJS performance & production tips
The Art of AngularJS - DeRailed 2014
Ad

Similar to Angularjs Performance (20)

PPTX
Dive into Angular, part 3: Performance
PPTX
Optimizing a large angular application (ng conf)
PPTX
AngularJs presentation
PPT
angularjsmeetup-150303044616-conversion-gate01
PPT
Angular js meetup
PPTX
AngularJS Scopes
PPTX
AngularJS Introduction (Talk given on Aug 5 2013)
PPTX
Scope demystified - AngularJS
PDF
AngularJS in practice
PDF
Everything You Need To Know About AngularJS
PPTX
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
PDF
Angular presentation
ODP
Introduction to Angular 2
PDF
AngularJS Beginner Day One
PPTX
Angular workshop - Full Development Guide
PPTX
Web technologies-course 12.pptx
PPTX
Java script performance tips
PDF
Data binding in AngularJS, from model to view
PPTX
Bhuvi ppt zerobug
PPTX
Intro to AngularJs
Dive into Angular, part 3: Performance
Optimizing a large angular application (ng conf)
AngularJs presentation
angularjsmeetup-150303044616-conversion-gate01
Angular js meetup
AngularJS Scopes
AngularJS Introduction (Talk given on Aug 5 2013)
Scope demystified - AngularJS
AngularJS in practice
Everything You Need To Know About AngularJS
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
Angular presentation
Introduction to Angular 2
AngularJS Beginner Day One
Angular workshop - Full Development Guide
Web technologies-course 12.pptx
Java script performance tips
Data binding in AngularJS, from model to view
Bhuvi ppt zerobug
Intro to AngularJs
Ad

Recently uploaded (20)

PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PPTX
ai tools demonstartion for schools and inter college
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Understanding Forklifts - TECH EHS Solution
PDF
The Role of Automation and AI in EHS Management for Data Centers.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
FLIGHT TICKET RESERVATION SYSTEM | FLIGHT BOOKING ENGINE API
PPTX
L1 - Introduction to python Backend.pptx
PDF
medical staffing services at VALiNTRY
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
QAware_Mario-Leander_Reimer_Architecting and Building a K8s-based AI Platform...
PPT
Introduction Database Management System for Course Database
PPTX
Online Work Permit System for Fast Permit Processing
PDF
Become an Agentblazer Champion Challenge Kickoff
PPTX
Transform Your Business with a Software ERP System
PDF
System and Network Administraation Chapter 3
PDF
Softaken Excel to vCard Converter Software.pdf
How to Migrate SBCGlobal Email to Yahoo Easily
ai tools demonstartion for schools and inter college
2025 Textile ERP Trends: SAP, Odoo & Oracle
Understanding Forklifts - TECH EHS Solution
The Role of Automation and AI in EHS Management for Data Centers.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
Which alternative to Crystal Reports is best for small or large businesses.pdf
FLIGHT TICKET RESERVATION SYSTEM | FLIGHT BOOKING ENGINE API
L1 - Introduction to python Backend.pptx
medical staffing services at VALiNTRY
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
How Creative Agencies Leverage Project Management Software.pdf
QAware_Mario-Leander_Reimer_Architecting and Building a K8s-based AI Platform...
Introduction Database Management System for Course Database
Online Work Permit System for Fast Permit Processing
Become an Agentblazer Champion Challenge Kickoff
Transform Your Business with a Software ERP System
System and Network Administraation Chapter 3
Softaken Excel to vCard Converter Software.pdf

Angularjs Performance

  • 2. What is Angulars biggest performance bottleneck?
  • 3. The $digest cycle (a.k.a. dirty checking)
  • 4. How the $digest cycle works When Angular (or you) calls $scope.$apply, this kicks off the $digest cycle. $rootScope $scope $scope $scope.$apply
  • 5. How the $digest cycle works During the digest cycle, Angular will check every $scope for all Angular bindings to see if any have changed. $rootScope $scope ngBinding ngBinding $scope ngBinding Changed?
  • 6. How the $digest cycle works If any binding has changed, Angular will finish the current cycle and then start the loop over again checking to see if the change affected other bindings. $rootScope $scope ngBinding ngBinding $scope ngBinding Changed? Yes Changed? No Changed? No (restart cycle)
  • 7. How the $digest cycle works A $digest cycle will only complete when no Angular bindings have changed. $rootScope $scope ngBinding ngBinding $scope ngBinding Changed? No Changed? No Changed? No ($digest completed)
  • 8. How the $digest cycle works This means that any change will cause the $digest cycle to run at least twice; once to update the binding and again to ensure that no other bindings were changed. Example: If your app has 200 bindings, Angular will run at least 400 dirty checks when a binding changes.
  • 9. Improving $digest performance ● Reduce number of bindings o use native DOM o ng-if instead of ng-hide o clean up $watchers when no longer needed o avoid ng-repeat where possible o avoid filters where possible ● Simplify logic in bindings o use simple comparisons o avoid binding to functions where possible
  • 10. Use Native DOM Just because you are using Angular as a framework does not mean you have to do everything the “Angular” way. One of the nice things about Angular is that you can choose when and when not to use it. If your DOM won’t change very often or only at certain, controllable times, you can use native DOM manipulation instead of relying on Angular bindings. Code Example
  • 11. Use ng-if instead of ng-show ng-show just hides the DOM using display:none; However, this keeps all the bindings of the element and it’s children. ng-if removes the DOM and all of it’s bindings. caveat: ng-if manipulates the DOM, which can become more expensive if the ng-if changes state a lot.
  • 12. Clean up $watchers Sometimes you only need to $watch for a change once and then no longer need to watch for any changes anymore. The $scope.$watch() function returns a function that you can use to remove the watch binding. var unWatch = $scope.$watch(‘contact’, function() { // do some logic unWatch(); // unbind watcher as no longer needed });
  • 13. Avoid ng-repeat ng-repeat has some big performance problems, especially with large data sets. ng-repeat adds lots of bindings to the DOM (1 for itself + n bindings inside the repeat * num of items in collection) <div ng-repeat=”item in list”> <div>{{hello}} <span>{{goodbye}}</span></div> </div> bindings = (2 bindings * list length) + ng-repeat [list of 10 items = 21 bindings]
  • 14. Avoid ng-repeat Each of these bindings will be checked on every $digest, even if the list didn’t change. Even worse, when the list does change, it will manipulate the DOM, which depending on what you are doing, can be expensive. This is the exact same problem with filters.
  • 15. Avoid filters Filters will be run on every $digest, even if the binding attached to the filter didn’t change. Filters such as lowercase, date, and orderBy are bad because they will transform the DOM at every $digest. Instead, you can use the $filter provider and save the filtered result to be displayed into the DOM. Code Example
  • 16. Use Simple Logic in Bindings Because dirty-checking requires a comparison check of the old value to the new value, the faster the comparison the faster the $digest cycle will run. Comparisons to primitives and shallow equality of objects are the fastest. Deep equality of objects are slow (so don’t do it).
  • 17. Avoid Functions in Bindings Functions in bindings are bad from a performance point of view. A function inside a binding ( {{fn()}} ) will be called at every $digest (having function call overhead). A function inside an ng-repeat will be called for every item in the collection. This doesn’t mean that functions inside ng-click are bad, since it will only be called when the element is clicked on.
  • 18. Avoid Functions in Bindings Types of Functions: ● Just returns variable - get rid of the function and just use the variable directly ● Performs some logic - try to pre-compute the logic once and then save the result to be used in a binding