SlideShare a Scribd company logo
jQuery and Standards
                  John Resig
 http://ejohn.org/ - http://twitter.com/jeresig
jQuery
✦   A JavaScript library designed to hide
    painful cross-browser compatibility issues
    while presenting a solid, usable, API.
Simple API
✦   $(“div > span”).addClass(“foo”);
    ✦ “Find some elements”
    ✦ “Do something with them”

✦   Makes complex manipulation of web pages
    simple
Space
✦   Highly competitive space
✦   Released Jan. 2006 - already a dominant
    player: Prototype JavaScript Library
✦   (Bundled with Ruby on Rails, had some
    nice coattail growth.)
✦   Other libraries: Dojo, Yahoo UI,
    MooTools
jQuery Recommendations to the W3C (2011)
jQuery Recommendations to the W3C (2011)
Specifications
✦   A few specifications that matter to us:
    ✦ DOM
    ✦ HTML
    ✦ CSS
    ✦ ECMAScript

✦   DOM more than anything else.
Concerns
✦   Performance.
✦   Performance.
✦   Performance.
✦   Usability.
✦   Any standards/browser addition that gives
    us performance benefits we’ll leap on.
New Standards We’ve Used
✦   Selectors API
    ✦ querySelectorAll

✦   Selectors API 2
    ✦ matchesSelector

✦   Animation Timing
    ✦ requestAnimationFrame

✦   ECMAScript
    ✦ bind
Selectors API
✦   A bit of a failure
✦   Didn’t listen to the needs of libraries
✦   Missed a number of important features/
    bug fixes:
    ✦ Contextual searching is messed up
    ✦ Error reporting is non-existent
    ✦ Implementations are inconsistent

✦   But it’s very fast, so we use it.
Matches Selector
✦   Selectors API 2 gave us matchesSelector
✦   We petitioned browsers to implement this
✦   They did, then it became a standard
✦   Makes our event delegation much faster
Smooth Animation
✦   requestAnimationFrame was created
✦   Scales animations based upon load
✦   Unfortunately this broke user expectations
    (expected certain frame rates)
✦   We just backed it out, will have to try
    again later
Needs
HTML string -> DOM support
✦   No good way to do this now
✦   Have to create a DOM element and use
    innerHTML
✦   Clunky and quite slow
✦   We want:
    ✦ someMethod(“<b>stuff</b>”) ->
      ✦ [ <b> ]
Access to event callbacks
✦   We want to be able to remove individual
    callbacks
✦   We want to be able to clone callbacks
✦   We want to be able to trigger specific
    callbacks
✦   All of this requires access to callbacks
An event for when stylesheets load
✦   Right now we have an event for DOM
    loaded
✦   And an event for window loaded
✦   But no event for when all the stylesheets
    load (important for looking at computed
    styles)
Will an element fire an event?
✦   For example - if I have a <form> element I
    want to be able to ask it:
    ✦ “Will you ever, natively, trigger a submit
      event?” (true)
✦   If I ask a <div> if it will trigger a submit
    event, it will return false.
Unique ID for DOM nodes
✦   We have to manage callbacks and data that
    we attach to DOM nodes
✦   To do this we have to assign the nodes a
    unique ID
✦   It’d be much better to have a property that
    took care of this for us
“Late Events”
✦   There is no way to ask the browser:
    ✦ “Did an event [foo] already fire on this
      element?”
✦   For example:
    ✦ Did the load event already fire on
      window?
    ✦ Did the submit event already fire on this
      form?
    ✦ etc.
Fast DOM mutation events
✦   I know this is being worked on right now
    (yay!)
✦   A way to have fast DOM mutation events
    would be awesome
✦   It could allow for some really slick
    restructuring of applications
✦   And make it easier for us to possibly do
    caching
mouseenter/mouseleave
✦   Internet Explorer provides these events
✦   They’re terribly useful (make it so that you
    don’t have to deal with event bubbling
    weirdness)
✦   Should be in browsers
✦   Need to verify DOM 3 Events spec
getComputedStyle
✦   A complete mess right now
✦   There is no consensus over what results
    should be returned and when
✦   There needs to be something declared
    here - probably a joint venture between
    the CSS and DOM working groups.
✦   Test suite for getComputedStyle
isCSSAuto
✦   There is no way of determining if a CSS
    property is currently set to “auto”
✦   This should be resolved, makes it much
    easier to do some types of animations
A way to sanely toggle visibility
✦   If we’re given an element that is display:
    none and we want to make it visible
    (display: block, perhaps)
✦   It is very hard to determine what the right
    “visible” style should be
✦   Especially if someone does:
    ✦ div { display: none; }

✦   Hint: It involves nasty use of iframes
contains() method
✦   We have compareDocumentPosition
✦   This is OK but contains() is very easy to
    use (in IE)
✦   Easy enough to implement, should be a
    standard
Better way of sorting nodes
✦   We have to use
    compareDocumentPosition now
✦   This is very very slow
✦   A numerical index property on nodes
    would be very useful (like in IE)
Is a node in an XML document
✦   A number of behaviors change when you’re
    in an XML document
✦   (IDs no longer resolve, some properties
    may not exist - like innerHTML, etc.)
✦   A way to determine if we’re working
    against an XML document would help
Support Tests
Questions?
✦   Questions?
    ✦ jeresig@gmail.com
    ✦ http://ejohn.org/
    ✦ http://twitter.com/jeresig

More Related Content

What's hot (20)

PDF
JS-IL: Getting MEAN in 1 Hour
Valeri Karpov
 
PPTX
Automated Testing with Cucumber, PhantomJS and Selenium
Dev9Com
 
PDF
Isomorphic React Applications: Performance And Scalability
Denis Izmaylov
 
PDF
React server side rendering performance
Nick Dreckshage
 
PDF
Алексей Швайка "Bundling: you are doing it wrong"
Fwdays
 
PDF
Grokking #9: Building a real-time and offline editing service with Couchbase
Oliver N
 
PDF
The fundamental problems of GUI applications and why people choose React
Oliver N
 
PPTX
PHP Indonesia - Nodejs Web Development
Irfan Maulana
 
PDF
MEAN Stack WeNode Barcelona Workshop
Valeri Karpov
 
PDF
NodeSummit - MEAN Stack
Valeri Karpov
 
ZIP
Drupal, Android and iPhone
Alexandru Badiu
 
PDF
Module, AMD, RequireJS
偉格 高
 
PDF
Capybara testing
Futureworkz
 
PDF
Modern Web Development in 2015
Oliver N
 
PDF
Production optimization with React and Webpack
k88hudson
 
PDF
JavaScript Web Workers
Tobias Pfeiffer
 
PPTX
In-browser storage and me
Jason Casden
 
PPTX
Blazor - An Introduction
JamieTaylor112
 
PDF
Writing Software not Code with Cucumber
Ben Mabey
 
PDF
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Pablo Godel
 
JS-IL: Getting MEAN in 1 Hour
Valeri Karpov
 
Automated Testing with Cucumber, PhantomJS and Selenium
Dev9Com
 
Isomorphic React Applications: Performance And Scalability
Denis Izmaylov
 
React server side rendering performance
Nick Dreckshage
 
Алексей Швайка "Bundling: you are doing it wrong"
Fwdays
 
Grokking #9: Building a real-time and offline editing service with Couchbase
Oliver N
 
The fundamental problems of GUI applications and why people choose React
Oliver N
 
PHP Indonesia - Nodejs Web Development
Irfan Maulana
 
MEAN Stack WeNode Barcelona Workshop
Valeri Karpov
 
NodeSummit - MEAN Stack
Valeri Karpov
 
Drupal, Android and iPhone
Alexandru Badiu
 
Module, AMD, RequireJS
偉格 高
 
Capybara testing
Futureworkz
 
Modern Web Development in 2015
Oliver N
 
Production optimization with React and Webpack
k88hudson
 
JavaScript Web Workers
Tobias Pfeiffer
 
In-browser storage and me
Jason Casden
 
Blazor - An Introduction
JamieTaylor112
 
Writing Software not Code with Cucumber
Ben Mabey
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Pablo Godel
 

Similar to jQuery Recommendations to the W3C (2011) (20)

PDF
Web Components at Scale, HTML5DevConf 2014-10-21
Chris Danford
 
PDF
Deep crawl the chaotic landscape of JavaScript
Onely
 
PDF
Progressive Web Apps. What, why and how
Riza Fahmi
 
PDF
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
Tech in Asia ID
 
PDF
John Resig Beijing 2010 (English Version)
Jia Mi
 
PDF
APIs for modern web apps
Chris Mills
 
PDF
jQuery Features to Avoid
dmethvin
 
PPTX
jQuery Conference Austin Sept 2013
dmethvin
 
PDF
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
Patrick Chanezon
 
PPTX
Angular js
Mauro Servienti
 
PPTX
Upstate CSCI 450 jQuery
DanWooster1
 
PPTX
jQuery Conference 2012 keynote
dmethvin
 
PDF
You Can Work on the Web Patform! (GOSIM 2023)
Igalia
 
PDF
Creating a Responsive Website From Scratch
Corky Brown
 
PPTX
JavaScript SEO: Testing and Debugging for Non-Developers - Search Marketing S...
Leigh Hanney
 
PDF
State of jQuery June 2013 - Portland
dmethvin
 
KEY
NinjaScript 2010-10-14
lrdesign
 
PDF
"Crafting a Third-Party Banking Library with Web Components and React", Germa...
Fwdays
 
PPTX
External JavaScript Widget Development Best Practices (updated) (v.1.1)
Volkan Özçelik
 
PPTX
External JavaScript Widget Development Best Practices
Volkan Özçelik
 
Web Components at Scale, HTML5DevConf 2014-10-21
Chris Danford
 
Deep crawl the chaotic landscape of JavaScript
Onely
 
Progressive Web Apps. What, why and how
Riza Fahmi
 
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
Tech in Asia ID
 
John Resig Beijing 2010 (English Version)
Jia Mi
 
APIs for modern web apps
Chris Mills
 
jQuery Features to Avoid
dmethvin
 
jQuery Conference Austin Sept 2013
dmethvin
 
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
Patrick Chanezon
 
Angular js
Mauro Servienti
 
Upstate CSCI 450 jQuery
DanWooster1
 
jQuery Conference 2012 keynote
dmethvin
 
You Can Work on the Web Patform! (GOSIM 2023)
Igalia
 
Creating a Responsive Website From Scratch
Corky Brown
 
JavaScript SEO: Testing and Debugging for Non-Developers - Search Marketing S...
Leigh Hanney
 
State of jQuery June 2013 - Portland
dmethvin
 
NinjaScript 2010-10-14
lrdesign
 
"Crafting a Third-Party Banking Library with Web Components and React", Germa...
Fwdays
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
Volkan Özçelik
 
External JavaScript Widget Development Best Practices
Volkan Özçelik
 
Ad

More from jeresig (20)

PDF
Does Coding Every Day Matter?
jeresig
 
PDF
Accidentally Becoming a Digital Librarian
jeresig
 
PDF
2014: John's Favorite Thing (Neo4j)
jeresig
 
PDF
Computer Vision as Art Historical Investigation
jeresig
 
PDF
Hacking Art History
jeresig
 
PDF
Using JS to teach JS at Khan Academy
jeresig
 
PDF
Applying Computer Vision to Art History
jeresig
 
PDF
NYARC 2014: Frick/Zeri Results
jeresig
 
PDF
EmpireJS: Hacking Art with Node js and Image Analysis
jeresig
 
PDF
Applying Computer Vision to Art History
jeresig
 
PDF
JavaScript Libraries (Ajax Exp 2006)
jeresig
 
PDF
Introduction to jQuery (Ajax Exp 2006)
jeresig
 
PDF
jQuery Open Source Process (RIT 2011)
jeresig
 
PDF
jQuery Open Source Process (Knight Foundation 2011)
jeresig
 
PDF
jQuery Mobile
jeresig
 
PDF
jQuery Open Source (Fronteer 2011)
jeresig
 
PDF
Introduction to jQuery (Ajax Exp 2007)
jeresig
 
PDF
Advanced jQuery (Ajax Exp 2007)
jeresig
 
PDF
JavaScript Library Overview (Ajax Exp West 2007)
jeresig
 
PDF
Meta Programming with JavaScript
jeresig
 
Does Coding Every Day Matter?
jeresig
 
Accidentally Becoming a Digital Librarian
jeresig
 
2014: John's Favorite Thing (Neo4j)
jeresig
 
Computer Vision as Art Historical Investigation
jeresig
 
Hacking Art History
jeresig
 
Using JS to teach JS at Khan Academy
jeresig
 
Applying Computer Vision to Art History
jeresig
 
NYARC 2014: Frick/Zeri Results
jeresig
 
EmpireJS: Hacking Art with Node js and Image Analysis
jeresig
 
Applying Computer Vision to Art History
jeresig
 
JavaScript Libraries (Ajax Exp 2006)
jeresig
 
Introduction to jQuery (Ajax Exp 2006)
jeresig
 
jQuery Open Source Process (RIT 2011)
jeresig
 
jQuery Open Source Process (Knight Foundation 2011)
jeresig
 
jQuery Mobile
jeresig
 
jQuery Open Source (Fronteer 2011)
jeresig
 
Introduction to jQuery (Ajax Exp 2007)
jeresig
 
Advanced jQuery (Ajax Exp 2007)
jeresig
 
JavaScript Library Overview (Ajax Exp West 2007)
jeresig
 
Meta Programming with JavaScript
jeresig
 
Ad

jQuery Recommendations to the W3C (2011)

  • 1. jQuery and Standards John Resig http://ejohn.org/ - http://twitter.com/jeresig
  • 2. jQuery ✦ A JavaScript library designed to hide painful cross-browser compatibility issues while presenting a solid, usable, API.
  • 3. Simple API ✦ $(“div > span”).addClass(“foo”); ✦ “Find some elements” ✦ “Do something with them” ✦ Makes complex manipulation of web pages simple
  • 4. Space ✦ Highly competitive space ✦ Released Jan. 2006 - already a dominant player: Prototype JavaScript Library ✦ (Bundled with Ruby on Rails, had some nice coattail growth.) ✦ Other libraries: Dojo, Yahoo UI, MooTools
  • 7. Specifications ✦ A few specifications that matter to us: ✦ DOM ✦ HTML ✦ CSS ✦ ECMAScript ✦ DOM more than anything else.
  • 8. Concerns ✦ Performance. ✦ Performance. ✦ Performance. ✦ Usability. ✦ Any standards/browser addition that gives us performance benefits we’ll leap on.
  • 9. New Standards We’ve Used ✦ Selectors API ✦ querySelectorAll ✦ Selectors API 2 ✦ matchesSelector ✦ Animation Timing ✦ requestAnimationFrame ✦ ECMAScript ✦ bind
  • 10. Selectors API ✦ A bit of a failure ✦ Didn’t listen to the needs of libraries ✦ Missed a number of important features/ bug fixes: ✦ Contextual searching is messed up ✦ Error reporting is non-existent ✦ Implementations are inconsistent ✦ But it’s very fast, so we use it.
  • 11. Matches Selector ✦ Selectors API 2 gave us matchesSelector ✦ We petitioned browsers to implement this ✦ They did, then it became a standard ✦ Makes our event delegation much faster
  • 12. Smooth Animation ✦ requestAnimationFrame was created ✦ Scales animations based upon load ✦ Unfortunately this broke user expectations (expected certain frame rates) ✦ We just backed it out, will have to try again later
  • 13. Needs
  • 14. HTML string -> DOM support ✦ No good way to do this now ✦ Have to create a DOM element and use innerHTML ✦ Clunky and quite slow ✦ We want: ✦ someMethod(“<b>stuff</b>”) -> ✦ [ <b> ]
  • 15. Access to event callbacks ✦ We want to be able to remove individual callbacks ✦ We want to be able to clone callbacks ✦ We want to be able to trigger specific callbacks ✦ All of this requires access to callbacks
  • 16. An event for when stylesheets load ✦ Right now we have an event for DOM loaded ✦ And an event for window loaded ✦ But no event for when all the stylesheets load (important for looking at computed styles)
  • 17. Will an element fire an event? ✦ For example - if I have a <form> element I want to be able to ask it: ✦ “Will you ever, natively, trigger a submit event?” (true) ✦ If I ask a <div> if it will trigger a submit event, it will return false.
  • 18. Unique ID for DOM nodes ✦ We have to manage callbacks and data that we attach to DOM nodes ✦ To do this we have to assign the nodes a unique ID ✦ It’d be much better to have a property that took care of this for us
  • 19. “Late Events” ✦ There is no way to ask the browser: ✦ “Did an event [foo] already fire on this element?” ✦ For example: ✦ Did the load event already fire on window? ✦ Did the submit event already fire on this form? ✦ etc.
  • 20. Fast DOM mutation events ✦ I know this is being worked on right now (yay!) ✦ A way to have fast DOM mutation events would be awesome ✦ It could allow for some really slick restructuring of applications ✦ And make it easier for us to possibly do caching
  • 21. mouseenter/mouseleave ✦ Internet Explorer provides these events ✦ They’re terribly useful (make it so that you don’t have to deal with event bubbling weirdness) ✦ Should be in browsers ✦ Need to verify DOM 3 Events spec
  • 22. getComputedStyle ✦ A complete mess right now ✦ There is no consensus over what results should be returned and when ✦ There needs to be something declared here - probably a joint venture between the CSS and DOM working groups. ✦ Test suite for getComputedStyle
  • 23. isCSSAuto ✦ There is no way of determining if a CSS property is currently set to “auto” ✦ This should be resolved, makes it much easier to do some types of animations
  • 24. A way to sanely toggle visibility ✦ If we’re given an element that is display: none and we want to make it visible (display: block, perhaps) ✦ It is very hard to determine what the right “visible” style should be ✦ Especially if someone does: ✦ div { display: none; } ✦ Hint: It involves nasty use of iframes
  • 25. contains() method ✦ We have compareDocumentPosition ✦ This is OK but contains() is very easy to use (in IE) ✦ Easy enough to implement, should be a standard
  • 26. Better way of sorting nodes ✦ We have to use compareDocumentPosition now ✦ This is very very slow ✦ A numerical index property on nodes would be very useful (like in IE)
  • 27. Is a node in an XML document ✦ A number of behaviors change when you’re in an XML document ✦ (IDs no longer resolve, some properties may not exist - like innerHTML, etc.) ✦ A way to determine if we’re working against an XML document would help
  • 29. Questions? ✦ Questions? ✦ [email protected] ✦ http://ejohn.org/ ✦ http://twitter.com/jeresig