SlideShare a Scribd company logo
The State of jQuery
Dave Methvin
President, jQuery Foundation
jQuery Conference Austin
September, 2013
• Created in March 2012
• Coordinates jQuery team work
o Code
o Documentation
o Infrastructure
o Events
The jQuery Foundation
• A non-profit organization
• Funded by
o Conferences
o Donations
o Memberships
o YOU or your company can be a member
 http://jquery.org/join
The jQuery Foundation Is...
Founding Members
Platinum Member
Gold Members
• http://github.com/jquery
• jQuery Core, UI, Mobile
• Sizzle selector engine
• QUnit unit test framework
• jQuery Migrate plugin
• TestSwarm CI testing
• Documentation sites
jQuery Foundation Projects
● Support jQuery projects
● Support web developers
● Support web standards
● Advocate for developer needs
● Participate in standards process
○ W3C
○ ECMA 262 (JavaScript)
jQuery Foundation Initiatives
Important Incoming News
• jQuery 1.x vs. 2.x
o jQuery 1.x still supports IE 6/7/8
o jQuery 2.x supports modern browsers
o Both are maintained by the team
The jQuery Core Plan
• Released jQuery 1.9 in January
• Released jQuery 2.0 in April
• Released jQuery 1.10 in June
• API version sync
o 1.10.0 2.0.0
o 1.11.0 2.1.0
o etc.
o Patch versions may be on just one branch
1.x/2.x APIs Stay in Sync
• Identifies things your code is doing that
jQuery 1.9+ doesn't support anymore
• Actually makes older code work
• Lets you use jQuery 1.9+ with code that
hasn't been upgraded yet
jQuery Migrate Plugin
jQuery Migrate Example
• Shown in the uncompressed version
• Problem and solutions documented
jQuery Migrate Warnings
In jQuery, every change is
a breaking change for
some poor developer.
The Moral of the Story
Coming This Fall: jQuery
1.11/2.1
Coming This Fall: jQuery
1.11/2.1
● jQuery team will publish to Bower
● jQuery team will publish to npm
● You can manage dependencies
○ bower install jquery
○ bower install jquery#1.11.0
○ npm install jquery
● Use a component.json file for Bower
● Use a package.json file for npm
1.11/2.1: Dependency
Management
• Asynchronous Module Definition
• AMD takes care of internal dependencies
• You can choose the modules to load
• Load just what you need
• Use r.js to build a single file
• More flexible and granular than previous
custom grunt build process
1.11/2.1: Uses AMD internally
● Previously: jQuery runs feature detects
all at once, on jquery.js/page load
○ Impacts page load performance
● Now: Individual feature detect runs the
first time the feature is used
○ Defers the impact until needed
○ Doesn't run detects for sub-modules that
aren't used/called by your code!
1.11/2.1: Just-In-Time Detects
• You don't have to use Bower
• You don't have to use npm
• You don't have to use AMD
• Just include from a <script> tag
• You'll still get the performance boost
1.11/2.1: Still can use a CDN!
• Beta coming out within a month
• Give it a try
• Tell us when you think it's ready
o Which means you have to try it
1.11/2.1: When?
Let's Shut This Guy Up, Forever
● Dimensional changes make the browser
recalculate/redraw the page
○ Changing element sizes
○ Adding/removing classes or IDs
○ Adding new content
● We've reduced these where possible
○ Ex: .removeClass() when nothing changes
● A lot still depends on jQuery developers
1.11/2.1 Goal: Fewer Forced
Layouts
"A poor workman blames his tools."
Know How Your Tools Work
"Плохому танцору яйца мешают."
Know How Your Tools Work
"A poor dancer blames his balls."
Know How Your Tools Work
● jQuery simplifies/shortens code
● It doesn't try to hide the browser model
● You still need to Know the Browser
● Especially the layout engine
Understand the Browser
● A.K.A. Reflow
● Whenever you change the HTML or CSS
on a page, the browser must re-apply
any applicable CSS rules, and must
recalculate the layout whenever
dimensions of elements change.
● May affect all or just part of the page.
What is a Layout?
● Make a change to the document that
(potentially) affects dimensions
● Immediately ask the browser about the
new dimensions
○ "Immediately" meaning, "Before control
returns to the browser from your script."
What is a Forced Layout?
● Slow page load time
○ Often a result of .ready() abuse
● "Janky" page behavior when scrolling or
during animations
Impact of Too Many Layouts
http://jsfiddle.net/qjncp/show/
$(".box").on("mouseover mouseout", function(e) {
$(this).toggleClass("highlight", e.type === "mouseover");
var size = $(this).width();
$("#heart").width(size);
});
Simple Forced Layout Example
http://jsfiddle.net/qjncp/show/
$(".box").on("mouseover mouseout", function(e) {
$(this).toggleClass("highlight", e.type === "mouseover");
var size = $(this).width();
$("#heart").width(size);
});
Simple Forced Layout Example
FORCED LAYOUT
http://jsfiddle.net/qjncp/show/
● Google Chrome
● Internet Explorer 11
Demo: Finding Forced Layouts
● Scroll event occurs
● Inside the scroll event handler
a. Add a little bit of content
b. Ask the browser, "Did I fill it enough?"
c. If not, go back to (a)
d. Several times through...exit
Patterns To Avoid: Infinite Scroll
● Scroll event occurs
● Inside the scroll event handler
a. Add a little bit of content
b. Ask the browser, "Did I fill it enough?"
c. If not, go back to (a)
d. Several times through...exit
Patterns To Avoid: Infinite Scroll
FULL-PAGE FORCED
LAYOUT ON EVERY
SCROLL EVENT!
FULL-PAGE FORCED
LAYOUT ON EVERY
SCROLL EVENT!
(cough, Facebook)
● Use the regularity of grid layouts to
simplify your calculations, instead of
asking the browser to calculate!
● E.g., each row is 200px high, the page
has scrolled down 740px, we need to add
4 more rows of content
Infinite Scroll Strategy
Don't ask the browser a
question that is hard for it
to figure out but easy for
you to know (or track).
$(":hidden") vs $(".hidden")
Avoiding Forced Layout
● jQuery selector extension
● Can't use fast native DOM selector code
● ":hidden" elements defined as "don't take
up space in the document"
● Selecting these elements forces layout if
anything has changed in the DOM
$(":hidden")
● Standard CSS selector (by class)
● Uses fast DOM selector code
● Just needs to look at the DOM tree
○ Not CSS, even if CSS has recently changed
● Won't force a layout
● Can be combined with CSS transitions
● Fast and battery efficient
$(".hidden")
Throttle high frequency
events like mousemove or
scroll; handle with
requestAnimationFrame
www.html5rocks.com/en/tutorials/speed/rendering/
Avoiding Forced Layout
Modern browsers have the tools to find
these issues and make you look like a
web development star!
Know Your Tools
Twitter: @davemethvin
GitHub: @dmethvin
IRC (Freenode): DaveMethvin #jquery-dev
Email: dave@jquery.com
Questions?

More Related Content

What's hot

jQueryTO: State of jQuery March 2013
jQueryTO: State of jQuery March 2013jQueryTO: State of jQuery March 2013
jQueryTO: State of jQuery March 2013
dmethvin
 
AngularJS for Legacy Apps
AngularJS for Legacy AppsAngularJS for Legacy Apps
AngularJS for Legacy Apps
Peter Drinnan
 

What's hot (20)

Automated perf optimization - jQuery Conference
Automated perf optimization - jQuery ConferenceAutomated perf optimization - jQuery Conference
Automated perf optimization - jQuery Conference
 
JsViews - Next Generation jQuery Templates
JsViews - Next Generation jQuery TemplatesJsViews - Next Generation jQuery Templates
JsViews - Next Generation jQuery Templates
 
Transforming Front-End Disaster Code™ Into A Maintainable Masterpiece
Transforming Front-End Disaster Code™ Into A Maintainable MasterpieceTransforming Front-End Disaster Code™ Into A Maintainable Masterpiece
Transforming Front-End Disaster Code™ Into A Maintainable Masterpiece
 
Going Node.js at Netflix
Going Node.js at NetflixGoing Node.js at Netflix
Going Node.js at Netflix
 
jQueryTO: State of jQuery March 2013
jQueryTO: State of jQuery March 2013jQueryTO: State of jQuery March 2013
jQueryTO: State of jQuery March 2013
 
HTTP 2.0 - Web Unleashed 2015
HTTP 2.0 - Web Unleashed 2015HTTP 2.0 - Web Unleashed 2015
HTTP 2.0 - Web Unleashed 2015
 
Learning jQuery @ MIT
Learning jQuery @ MITLearning jQuery @ MIT
Learning jQuery @ MIT
 
PrairieDevCon 2014 - Web Doesn't Mean Slow
PrairieDevCon 2014 -  Web Doesn't Mean SlowPrairieDevCon 2014 -  Web Doesn't Mean Slow
PrairieDevCon 2014 - Web Doesn't Mean Slow
 
Rapid Testing, Rapid Development
Rapid Testing, Rapid DevelopmentRapid Testing, Rapid Development
Rapid Testing, Rapid Development
 
Smooth Animations for Web & Hybrid
Smooth Animations for Web & HybridSmooth Animations for Web & Hybrid
Smooth Animations for Web & Hybrid
 
AngularJS for Legacy Apps
AngularJS for Legacy AppsAngularJS for Legacy Apps
AngularJS for Legacy Apps
 
How to Use WebVR to Enhance the Web Experience
How to Use WebVR to Enhance the Web ExperienceHow to Use WebVR to Enhance the Web Experience
How to Use WebVR to Enhance the Web Experience
 
Open-source Mic Talks at AOL
Open-source Mic Talks at AOLOpen-source Mic Talks at AOL
Open-source Mic Talks at AOL
 
Flexible UI Components for a Multi-Framework World
Flexible UI Components for a Multi-Framework WorldFlexible UI Components for a Multi-Framework World
Flexible UI Components for a Multi-Framework World
 
React Fundamentals - Jakarta JS, Apr 2016
React Fundamentals - Jakarta JS, Apr 2016React Fundamentals - Jakarta JS, Apr 2016
React Fundamentals - Jakarta JS, Apr 2016
 
jQuery UI and Plugins
jQuery UI and PluginsjQuery UI and Plugins
jQuery UI and Plugins
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015
 
Angular - Beginner
Angular - BeginnerAngular - Beginner
Angular - Beginner
 
jQuery and the W3C
jQuery and the W3CjQuery and the W3C
jQuery and the W3C
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS Fundamentals
 

Viewers also liked (7)

Question 7
Question 7Question 7
Question 7
 
The Well-Grounded Nuby
The Well-Grounded NubyThe Well-Grounded Nuby
The Well-Grounded Nuby
 
IOC + Javascript
IOC + JavascriptIOC + Javascript
IOC + Javascript
 
Beyond DOM Manipulations: Building Stateful Modules with Events and Promises
Beyond DOM Manipulations: Building Stateful Modules with Events and PromisesBeyond DOM Manipulations: Building Stateful Modules with Events and Promises
Beyond DOM Manipulations: Building Stateful Modules with Events and Promises
 
Building Backbone.js Apps for Scale
Building Backbone.js Apps for ScaleBuilding Backbone.js Apps for Scale
Building Backbone.js Apps for Scale
 
Backbone testing
Backbone testingBackbone testing
Backbone testing
 
Scaling Crashlytics: Building Analytics on Redis 2.6
Scaling Crashlytics: Building Analytics on Redis 2.6Scaling Crashlytics: Building Analytics on Redis 2.6
Scaling Crashlytics: Building Analytics on Redis 2.6
 

Similar to jQuery Conference Austin Sept 2013

State of jQuery - AspDotNetStorefront Conference
State of jQuery - AspDotNetStorefront ConferenceState of jQuery - AspDotNetStorefront Conference
State of jQuery - AspDotNetStorefront Conference
dmethvin
 
Web app with j query &amp; javascript (5:4)
Web app with j query &amp; javascript (5:4)Web app with j query &amp; javascript (5:4)
Web app with j query &amp; javascript (5:4)
Thinkful
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)
Jia Mi
 
Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012
Volkan Özçelik
 
Getting started with dev tools (atl)
Getting started with dev tools (atl)Getting started with dev tools (atl)
Getting started with dev tools (atl)
Thinkful
 
jQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPagesjQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPages
Mark Roden
 

Similar to jQuery Conference Austin Sept 2013 (20)

State of jQuery - AspDotNetStorefront Conference
State of jQuery - AspDotNetStorefront ConferenceState of jQuery - AspDotNetStorefront Conference
State of jQuery - AspDotNetStorefront Conference
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
 
Making cross browser tests beautiful
Making cross browser tests beautifulMaking cross browser tests beautiful
Making cross browser tests beautiful
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portland
 
Discover the power of browser developer tools
Discover the power of browser developer toolsDiscover the power of browser developer tools
Discover the power of browser developer tools
 
JavascriptMVC: Another choice of web framework
JavascriptMVC: Another choice of web frameworkJavascriptMVC: Another choice of web framework
JavascriptMVC: Another choice of web framework
 
Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
 
9 Useful Things that Every Web Developer Needs to Know
9 Useful Things that Every Web Developer Needs to Know9 Useful Things that Every Web Developer Needs to Know
9 Useful Things that Every Web Developer Needs to Know
 
Web app with j query &amp; javascript (5:4)
Web app with j query &amp; javascript (5:4)Web app with j query &amp; javascript (5:4)
Web app with j query &amp; javascript (5:4)
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - Introduction
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)
 
External JavaScript Widget Development Best Practices
External JavaScript Widget Development Best PracticesExternal JavaScript Widget Development Best Practices
External JavaScript Widget Development Best Practices
 
Presentation
PresentationPresentation
Presentation
 
Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012
 
Getting started with dev tools (atl)
Getting started with dev tools (atl)Getting started with dev tools (atl)
Getting started with dev tools (atl)
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1)
 
Flexible UI Components for a Multi-Framework World
Flexible UI Components for a Multi-Framework WorldFlexible UI Components for a Multi-Framework World
Flexible UI Components for a Multi-Framework World
 
State of jQuery '09
State of jQuery '09State of jQuery '09
State of jQuery '09
 
jQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPagesjQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPages
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
 

More from dmethvin (6)

jQuery Foot-Gun Features
jQuery Foot-Gun FeaturesjQuery Foot-Gun Features
jQuery Foot-Gun Features
 
jQuery Conference Chicago - September 2014
jQuery Conference Chicago - September 2014jQuery Conference Chicago - September 2014
jQuery Conference Chicago - September 2014
 
jQuery Conference Toronto
jQuery Conference TorontojQuery Conference Toronto
jQuery Conference Toronto
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoid
 
jQuery Conference 2012 keynote
jQuery Conference 2012 keynotejQuery Conference 2012 keynote
jQuery Conference 2012 keynote
 
jQuery 1.7 Events
jQuery 1.7 EventsjQuery 1.7 Events
jQuery 1.7 Events
 

Recently uploaded

Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 

Recently uploaded (20)

Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 

jQuery Conference Austin Sept 2013

  • 1. The State of jQuery Dave Methvin President, jQuery Foundation jQuery Conference Austin September, 2013
  • 2.
  • 3. • Created in March 2012 • Coordinates jQuery team work o Code o Documentation o Infrastructure o Events The jQuery Foundation
  • 4. • A non-profit organization • Funded by o Conferences o Donations o Memberships o YOU or your company can be a member  http://jquery.org/join The jQuery Foundation Is...
  • 7. • http://github.com/jquery • jQuery Core, UI, Mobile • Sizzle selector engine • QUnit unit test framework • jQuery Migrate plugin • TestSwarm CI testing • Documentation sites jQuery Foundation Projects
  • 8. ● Support jQuery projects ● Support web developers ● Support web standards ● Advocate for developer needs ● Participate in standards process ○ W3C ○ ECMA 262 (JavaScript) jQuery Foundation Initiatives
  • 10. • jQuery 1.x vs. 2.x o jQuery 1.x still supports IE 6/7/8 o jQuery 2.x supports modern browsers o Both are maintained by the team The jQuery Core Plan
  • 11. • Released jQuery 1.9 in January • Released jQuery 2.0 in April • Released jQuery 1.10 in June • API version sync o 1.10.0 2.0.0 o 1.11.0 2.1.0 o etc. o Patch versions may be on just one branch 1.x/2.x APIs Stay in Sync
  • 12. • Identifies things your code is doing that jQuery 1.9+ doesn't support anymore • Actually makes older code work • Lets you use jQuery 1.9+ with code that hasn't been upgraded yet jQuery Migrate Plugin
  • 14. • Shown in the uncompressed version • Problem and solutions documented jQuery Migrate Warnings
  • 15. In jQuery, every change is a breaking change for some poor developer. The Moral of the Story
  • 16. Coming This Fall: jQuery 1.11/2.1
  • 17. Coming This Fall: jQuery 1.11/2.1
  • 18. ● jQuery team will publish to Bower ● jQuery team will publish to npm ● You can manage dependencies ○ bower install jquery ○ bower install jquery#1.11.0 ○ npm install jquery ● Use a component.json file for Bower ● Use a package.json file for npm 1.11/2.1: Dependency Management
  • 19. • Asynchronous Module Definition • AMD takes care of internal dependencies • You can choose the modules to load • Load just what you need • Use r.js to build a single file • More flexible and granular than previous custom grunt build process 1.11/2.1: Uses AMD internally
  • 20. ● Previously: jQuery runs feature detects all at once, on jquery.js/page load ○ Impacts page load performance ● Now: Individual feature detect runs the first time the feature is used ○ Defers the impact until needed ○ Doesn't run detects for sub-modules that aren't used/called by your code! 1.11/2.1: Just-In-Time Detects
  • 21. • You don't have to use Bower • You don't have to use npm • You don't have to use AMD • Just include from a <script> tag • You'll still get the performance boost 1.11/2.1: Still can use a CDN!
  • 22. • Beta coming out within a month • Give it a try • Tell us when you think it's ready o Which means you have to try it 1.11/2.1: When?
  • 23. Let's Shut This Guy Up, Forever
  • 24. ● Dimensional changes make the browser recalculate/redraw the page ○ Changing element sizes ○ Adding/removing classes or IDs ○ Adding new content ● We've reduced these where possible ○ Ex: .removeClass() when nothing changes ● A lot still depends on jQuery developers 1.11/2.1 Goal: Fewer Forced Layouts
  • 25. "A poor workman blames his tools." Know How Your Tools Work
  • 26. "Плохому танцору яйца мешают." Know How Your Tools Work
  • 27. "A poor dancer blames his balls." Know How Your Tools Work
  • 28. ● jQuery simplifies/shortens code ● It doesn't try to hide the browser model ● You still need to Know the Browser ● Especially the layout engine Understand the Browser
  • 29. ● A.K.A. Reflow ● Whenever you change the HTML or CSS on a page, the browser must re-apply any applicable CSS rules, and must recalculate the layout whenever dimensions of elements change. ● May affect all or just part of the page. What is a Layout?
  • 30. ● Make a change to the document that (potentially) affects dimensions ● Immediately ask the browser about the new dimensions ○ "Immediately" meaning, "Before control returns to the browser from your script." What is a Forced Layout?
  • 31. ● Slow page load time ○ Often a result of .ready() abuse ● "Janky" page behavior when scrolling or during animations Impact of Too Many Layouts
  • 32. http://jsfiddle.net/qjncp/show/ $(".box").on("mouseover mouseout", function(e) { $(this).toggleClass("highlight", e.type === "mouseover"); var size = $(this).width(); $("#heart").width(size); }); Simple Forced Layout Example
  • 33. http://jsfiddle.net/qjncp/show/ $(".box").on("mouseover mouseout", function(e) { $(this).toggleClass("highlight", e.type === "mouseover"); var size = $(this).width(); $("#heart").width(size); }); Simple Forced Layout Example FORCED LAYOUT
  • 34. http://jsfiddle.net/qjncp/show/ ● Google Chrome ● Internet Explorer 11 Demo: Finding Forced Layouts
  • 35. ● Scroll event occurs ● Inside the scroll event handler a. Add a little bit of content b. Ask the browser, "Did I fill it enough?" c. If not, go back to (a) d. Several times through...exit Patterns To Avoid: Infinite Scroll
  • 36. ● Scroll event occurs ● Inside the scroll event handler a. Add a little bit of content b. Ask the browser, "Did I fill it enough?" c. If not, go back to (a) d. Several times through...exit Patterns To Avoid: Infinite Scroll FULL-PAGE FORCED LAYOUT ON EVERY SCROLL EVENT! FULL-PAGE FORCED LAYOUT ON EVERY SCROLL EVENT! (cough, Facebook)
  • 37. ● Use the regularity of grid layouts to simplify your calculations, instead of asking the browser to calculate! ● E.g., each row is 200px high, the page has scrolled down 740px, we need to add 4 more rows of content Infinite Scroll Strategy
  • 38. Don't ask the browser a question that is hard for it to figure out but easy for you to know (or track). $(":hidden") vs $(".hidden") Avoiding Forced Layout
  • 39. ● jQuery selector extension ● Can't use fast native DOM selector code ● ":hidden" elements defined as "don't take up space in the document" ● Selecting these elements forces layout if anything has changed in the DOM $(":hidden")
  • 40. ● Standard CSS selector (by class) ● Uses fast DOM selector code ● Just needs to look at the DOM tree ○ Not CSS, even if CSS has recently changed ● Won't force a layout ● Can be combined with CSS transitions ● Fast and battery efficient $(".hidden")
  • 41. Throttle high frequency events like mousemove or scroll; handle with requestAnimationFrame www.html5rocks.com/en/tutorials/speed/rendering/ Avoiding Forced Layout
  • 42. Modern browsers have the tools to find these issues and make you look like a web development star! Know Your Tools
  • 43. Twitter: @davemethvin GitHub: @dmethvin IRC (Freenode): DaveMethvin #jquery-dev Email: dave@jquery.com Questions?