SlideShare a Scribd company logo
1 of 23
jQuery performance tips
  Web should be snappy, not sloppy




               by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   1
Most popular sites using jQuery on




                                                                  Picture from internet


            by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast              2
Fast: ID & Element Selectors
$(‘#Element, form, input’)

ID and element selectors are the fastest
This is because they’re backed by native DOM
operations (eg. getElementById()).




                    by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   3
Slower: Class Selectors
$(‘.element’)

getElementsByClassName() not supported in IE5-8
Supported in FF3+, Safari 4+, Chrome 4+, Opera 10.10+
so faster in these.




                    by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   4
Slowest: Pseudo & Attribute Selectors
$(‘:visible, :hidden’);
$(‘[attribute=value]’);

This is due to no native calls available that we can take
advantage of.
querySelector() and querySelectorAll() help with this in
modern browsers.



                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   5
Understand parents and children
1) $(‘.child", $parent).show(); //context
2) $parent.find(‘.child’).show(); //find()
3) $parent.children(".child’).show(); //immediate
children
4) $(‘#parent > .child’).show(); //child combinator
selector
5) $(‘#parent .child’).show(); //class selector
6) $('.child', $('#parent')).show(); //created context


                      by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   6
Context
$(‘.child’, $parent).show();



Here the scope must be parsed and
translated to $.parent.find(‘child’).show();
causing it to be slower.

~5-10% slower than the fastest option

                      by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   7
find()
$parent.find(‘.child’).show();



This is the fastest of the entire set. I’ll explain why
shortly.




                       by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   8
Immediate children
$parent.children(‘.child’).show();

Internally uses $.sibling and JavaScript’s nextSibling() to
find nodes following other nodes in the same tree.

~50% slower than the fastest option




                      by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   9
CSS child combinatory selector

$(‘#parent > .child’).show();

Uses a child combinatory selector, however Sizzle works
from right to left.
Bad as it will match .child before checking it’s a direct
child of the parent.
~70% slower than the fastest option



                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   10
CSS class selector
$(‘#parent .child’).show();

Uses a class selector and is constrained by the same
rules as 4).
Internally also has to translate to using .find()
~77% slower than the fastest option




                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   11
Created context
$(‘.child’, $(‘#parent’)).show();

Equivalent internally to
$(‘#parent’).find(‘.child’), however note that parent is a
jQuery object.
~23% slower than the fastest option




                      by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   12
The fastest option is..
$parent.find(‘.child’).show();

The parent selector is already cached here, so it doesn’t
need to be refetched from the DOM.
Without caching this is ~ 16% slower.
Directly uses native
getElementById, getElementsByName, getElementsByT
agName to search inside the passed context under the
hood.

                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   13
Why not use the DOM
element itself? This is faster:

$('a').bind(‘click’, function(){
     console.log('You clicked: ' + this.id);
});




                    by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   14
Caching is the best practice
var   parents = $(‘.parents’), //caching
      children = $(‘.parents’).find(‘.child’), //bad
      kids = parents.find(‘.child’); //good




Caching just means we’re storing the result of a
selection for later re-use.




                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   15
So remember..
Each $(‘.elem’) will re-run your search of the DOM and
return a new collection
You can then do anything with the cached collection.
Caching will decrease repeat selections.




                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   16
Chaining
var parents = $(‘.parents’).doSomething().doSomethingElse();



Almost all jQuery methods return a jQuery object and
support chaining.
This means after executing a method on a
selection, you can continue executing more.
Less code and it’s easier to write!




                        by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   17
No-chaining vs. chaining
//Without chaining
$(‘#notification’).fadeIn(‘slow’);
$(‘#notification’).addClass(‘.activeNotification’);
$(‘#notification’).css(‘marginLeft’, ‘50px’);
//With chaining
$(‘#notification’).fadeIn(‘slow’)
                    .addClass(‘.activeNotification’)
                    .css(‘marginLeft’, ‘50px’);




                     by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   18
Better .append() usage
Minimise use by building HTML strings in memory and
using a single .append() instead.
Multiple appends can be up to 90% slower when not
appending to cached selectors and up to 20% slower
with them.




                   by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   19
Use .detach()
Works great when you’re doing heavy interaction with
a node
Allows you to re-insert the node to the DOM once
you’re ready
Up to 60% faster than working with undetached nodes.




                   by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   20
Better .data() usage
We usually attach data like this..
But this is actually much faster..
$(‘#elem’).data( key , value );
$.data(‘#elem’, key , value);

as there’s overhead creating a jQuery object and doing
data-parsing in the first.



                      by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   21
Thank you




by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   22
Author
Sameera Thilakasiri is a front-end developer based in Colombo. Specialist in
UI, UX, SEO, IA, IxD, RWD. He is blogging technical areas and lifestyle
photographer while is leisure. He can be reached by
http://www.sameerast.com or @sameerast




                            by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast   23

More Related Content

Viewers also liked (6)

Berlin m pstories
Berlin m pstoriesBerlin m pstories
Berlin m pstories
 
Vincent celii
Vincent celiiVincent celii
Vincent celii
 
Measuring and Improving Decision Quality
Measuring and Improving Decision QualityMeasuring and Improving Decision Quality
Measuring and Improving Decision Quality
 
Para que sirven las frutas
Para que sirven las frutasPara que sirven las frutas
Para que sirven las frutas
 
KPR
KPRKPR
KPR
 
NGO Day 2013
NGO Day 2013NGO Day 2013
NGO Day 2013
 

Similar to jQuery performance best practices by Sameera Thilakasiri

SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014
Mark Rackley
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 
Bcblackpool jquery tips
Bcblackpool jquery tipsBcblackpool jquery tips
Bcblackpool jquery tips
Jack Franklin
 
Even faster web sites
Even faster web sitesEven faster web sites
Even faster web sites
Felipe Lavín
 

Similar to jQuery performance best practices by Sameera Thilakasiri (20)

jQuery Performance Tips and Tricks (2011)
jQuery Performance Tips and Tricks (2011)jQuery Performance Tips and Tricks (2011)
jQuery Performance Tips and Tricks (2011)
 
Don't Worry jQuery is very Easy:Learning Tips For jQuery
Don't Worry jQuery is very Easy:Learning Tips For jQueryDon't Worry jQuery is very Easy:Learning Tips For jQuery
Don't Worry jQuery is very Easy:Learning Tips For jQuery
 
SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014
 
jQuery Performance Tips and Tricks
jQuery Performance Tips and TricksjQuery Performance Tips and Tricks
jQuery Performance Tips and Tricks
 
Search Form for Rails
Search Form for RailsSearch Form for Rails
Search Form for Rails
 
So long, jQuery, and thanks for all the fish!
So long, jQuery, and thanks for all the fish!So long, jQuery, and thanks for all the fish!
So long, jQuery, and thanks for all the fish!
 
Efficient use of jQuery selector
Efficient use of jQuery selectorEfficient use of jQuery selector
Efficient use of jQuery selector
 
SPTechCon DevDays - SharePoint & jQuery
SPTechCon DevDays - SharePoint & jQuerySPTechCon DevDays - SharePoint & jQuery
SPTechCon DevDays - SharePoint & jQuery
 
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
 
68837.ppt
68837.ppt68837.ppt
68837.ppt
 
Bcblackpool jquery tips
Bcblackpool jquery tipsBcblackpool jquery tips
Bcblackpool jquery tips
 
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsMeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
 
2009 Barcamp Nashville Web Security 101
2009 Barcamp Nashville   Web Security 1012009 Barcamp Nashville   Web Security 101
2009 Barcamp Nashville Web Security 101
 
Proposed PHP function: is_literal()
Proposed PHP function: is_literal()Proposed PHP function: is_literal()
Proposed PHP function: is_literal()
 
jQuery Proven Performance Tips & Tricks
jQuery Proven Performance Tips & TricksjQuery Proven Performance Tips & Tricks
jQuery Proven Performance Tips & Tricks
 
Even faster web sites
Even faster web sitesEven faster web sites
Even faster web sites
 
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePointSPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
 
Gems Of Selenium
Gems Of SeleniumGems Of Selenium
Gems Of Selenium
 
javascript
javascriptjavascript
javascript
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

jQuery performance best practices by Sameera Thilakasiri

  • 1. jQuery performance tips Web should be snappy, not sloppy by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 1
  • 2. Most popular sites using jQuery on Picture from internet by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 2
  • 3. Fast: ID & Element Selectors $(‘#Element, form, input’) ID and element selectors are the fastest This is because they’re backed by native DOM operations (eg. getElementById()). by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 3
  • 4. Slower: Class Selectors $(‘.element’) getElementsByClassName() not supported in IE5-8 Supported in FF3+, Safari 4+, Chrome 4+, Opera 10.10+ so faster in these. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 4
  • 5. Slowest: Pseudo & Attribute Selectors $(‘:visible, :hidden’); $(‘[attribute=value]’); This is due to no native calls available that we can take advantage of. querySelector() and querySelectorAll() help with this in modern browsers. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 5
  • 6. Understand parents and children 1) $(‘.child", $parent).show(); //context 2) $parent.find(‘.child’).show(); //find() 3) $parent.children(".child’).show(); //immediate children 4) $(‘#parent > .child’).show(); //child combinator selector 5) $(‘#parent .child’).show(); //class selector 6) $('.child', $('#parent')).show(); //created context by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 6
  • 7. Context $(‘.child’, $parent).show(); Here the scope must be parsed and translated to $.parent.find(‘child’).show(); causing it to be slower. ~5-10% slower than the fastest option by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 7
  • 8. find() $parent.find(‘.child’).show(); This is the fastest of the entire set. I’ll explain why shortly. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 8
  • 9. Immediate children $parent.children(‘.child’).show(); Internally uses $.sibling and JavaScript’s nextSibling() to find nodes following other nodes in the same tree. ~50% slower than the fastest option by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 9
  • 10. CSS child combinatory selector $(‘#parent > .child’).show(); Uses a child combinatory selector, however Sizzle works from right to left. Bad as it will match .child before checking it’s a direct child of the parent. ~70% slower than the fastest option by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 10
  • 11. CSS class selector $(‘#parent .child’).show(); Uses a class selector and is constrained by the same rules as 4). Internally also has to translate to using .find() ~77% slower than the fastest option by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 11
  • 12. Created context $(‘.child’, $(‘#parent’)).show(); Equivalent internally to $(‘#parent’).find(‘.child’), however note that parent is a jQuery object. ~23% slower than the fastest option by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 12
  • 13. The fastest option is.. $parent.find(‘.child’).show(); The parent selector is already cached here, so it doesn’t need to be refetched from the DOM. Without caching this is ~ 16% slower. Directly uses native getElementById, getElementsByName, getElementsByT agName to search inside the passed context under the hood. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 13
  • 14. Why not use the DOM element itself? This is faster: $('a').bind(‘click’, function(){ console.log('You clicked: ' + this.id); }); by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 14
  • 15. Caching is the best practice var parents = $(‘.parents’), //caching children = $(‘.parents’).find(‘.child’), //bad kids = parents.find(‘.child’); //good Caching just means we’re storing the result of a selection for later re-use. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 15
  • 16. So remember.. Each $(‘.elem’) will re-run your search of the DOM and return a new collection You can then do anything with the cached collection. Caching will decrease repeat selections. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 16
  • 17. Chaining var parents = $(‘.parents’).doSomething().doSomethingElse(); Almost all jQuery methods return a jQuery object and support chaining. This means after executing a method on a selection, you can continue executing more. Less code and it’s easier to write! by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 17
  • 18. No-chaining vs. chaining //Without chaining $(‘#notification’).fadeIn(‘slow’); $(‘#notification’).addClass(‘.activeNotification’); $(‘#notification’).css(‘marginLeft’, ‘50px’); //With chaining $(‘#notification’).fadeIn(‘slow’) .addClass(‘.activeNotification’) .css(‘marginLeft’, ‘50px’); by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 18
  • 19. Better .append() usage Minimise use by building HTML strings in memory and using a single .append() instead. Multiple appends can be up to 90% slower when not appending to cached selectors and up to 20% slower with them. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 19
  • 20. Use .detach() Works great when you’re doing heavy interaction with a node Allows you to re-insert the node to the DOM once you’re ready Up to 60% faster than working with undetached nodes. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 20
  • 21. Better .data() usage We usually attach data like this.. But this is actually much faster.. $(‘#elem’).data( key , value ); $.data(‘#elem’, key , value); as there’s overhead creating a jQuery object and doing data-parsing in the first. by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 21
  • 22. Thank you by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 22
  • 23. Author Sameera Thilakasiri is a front-end developer based in Colombo. Specialist in UI, UX, SEO, IA, IxD, RWD. He is blogging technical areas and lifestyle photographer while is leisure. He can be reached by http://www.sameerast.com or @sameerast by Sameera Thilakasiri | www.sameerast.com | Twitter @ sameerast 23