jqueryto: state of jquery march 2013
DESCRIPTION
TRANSCRIPT
The State of jQuery
Dave Methvin
President, jQuery Foundation
March, 2013
Jan 2006: The birth of jQuery
How It All Started
Feb 2013: jQuery core is used by 64
percent of the top 10,000 sites
Seven Years of Good Luck
• Created in March 2012
The jQuery Foundation
• Created in March 2012
The jQuery Foundation
• Created in March 2012
• Coordinates the work of jQuery team
members and volunteers
The jQuery Foundation
• A non-profit organization
o Volunteer board of directors
o Volunteer president (thats me)
o A few paid staff, mainly devs/ops
• Funded by o Conferences
o Donations – http://jquery.org/donate
o Memberships
o YOU or your company can be a member
http://jquery.org/join
The jQuery Foundation Is...
• Founding Members
jQuery Foundation
• Gold Members
jQuery Foundation
• Organize/fund work on the projects
• Advocate for web developer needs
o W3C web standards
o ECMA TC39 JavaScript standards
• Run two US conferences annually
• License conferences worldwide
The jQuery Foundation's Work
• http://github.com/jquery
• jQuery Core
• jQuery UI
• jQuery Mobile
• Sizzle selector engine
• QUnit unit test framework
• jQuery Migrate plugin
• TestSwarm CI testing
• Documentation sites
jQuery Foundation Projects
• It’s all on Github – not just the code
• File an issue when you see a problem
• Make pull requests against docs
• Join our forum and share knowledge
Join The Community
• jQuery 1.9 vs. 2.0
o jQuery 1.x still supports IE 6/7/8
o jQuery 2.x supports modern browsers
o The two versions stay in API sync
o Both branches maintained by the team
• Heavily publicized changes during 2012
• Released several public betas
• Shipped jQuery 1.9 in January
The jQuery Core Library Plan
Far too many people
are using "latest"
versions in live sites!
NEVER HOTLINK:
http://code.jquery.com/jquery-latest.js
http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js
What We Learned (the Hard Way)
jQuery 1.9: Users Love It!
• Identifies things your code is doing that
jQuery 1.9/2.0 don't support anymore
• Actually changes jQuery back to pre-1.9
behavior so older code just works
• Lets you use jQuery 1.9/2.0 with code
that hasn't been upgraded yet
• Documentation gives advice on how to
remediate the issue
jQuery Migrate Plugin
jQuery Migrate Example
• Shown in the uncompressed version
• Problem and solutions documented
jQuery Migrate Warnings
How Do I Fix This?
Include the minified version of the plugin
and no warnings appear
Shut-Up-and-Fix-It Mode
• Removed $.browser
• Removed .live()
• Fixed $.parseJSON
What We Broke Fixed, and Why
• Usually the wrong inference
• Often assumes future browsers and
versions will be broken the same way
• Horribly misused and misunderstood
Why $.browser Deserves To Go
Chrome added focusin/out two years ago!
Why You Don't Assume Browsers
Opera just announced their future
products will be based on the WebKit
engine, not their own Presto engine.
Browser Name is Only a BRAND
• IE can emulate older versions via <meta name="X-UA-Compatible“ …>
• Can be accidentally lobotomized via that
confounded Address Bar button
• Browser version in the UA string does not
represent the real version
Internet Explorer's Disguises
The Enemy!
Who Else Used $.browser?
Who Else Used $.browser?
Please Don't Do This ...
Not fixing the problem, no code attribution
... copy/pasta is bad!
Use jQuery Migrate or (better) Modernizr!
... copy/pasta is bad!
• It's like global variables, but for events
• Every event that occurs must bubble to document before it can be processed
• Processing events can be expensive,
especially on deep documents
• Still easy to process events globally: o $(document).on("click", "a", linkyClicky);
What's Wrong With .live()?
• Doesn't work well on iPhone/iPad!
• iOS doesn't bubble touch events all the way to document
• Delegated touch events must be processed below the <body> element
Letting all events bubble to document destroys the usefulness of the event
propagation model
What's Wrong With .live()?
Original line: $(".dialog .close").live("click", ...
Direct replacement (poor): $(document).on("click", ".dialog .close" ...
Optimized replacement: $(".dialog").on("click", ".close", ...
Optimize Your Selectors
The Bug: • Before 1.9, $.parseJSON("") returned
null but it's not valid JSON
The Fix: • In 1.9, $.parseJSON("") is an error
JSON Should Be JSON
• We called invalid JSON invalid.
• We're also out of coffee.
The Result: PANIC
In jQuery, every change is
a breaking change for
some poor developer.
The Moral of the Story
Nobody tries the jQuery
alpha and beta builds.
The Other Moral of the Story
• How Big?
Big News!
• How Big?
Big News!
• Released yesterday -- please try it!
• Custom builds can shrink size
• Bare-bones selector engine option
o Basically, just querySelectorAll
• How small?
o Normal build: 28KB minified and gzipped
o Blog example: 17KB
o Tiniest build: 14KB
Big News: jQuery 2.0 Beta 2
Making a public web site?
You don't need 2.0 right now!
jQuery 2.0 is a good fit for:
• Chrome or Firefox plugins
• node.js apps (jsdom, Cheerio)
• Windows 8 Store ("Modern/Metro") apps
• PhoneGap (iPhone/Android/BlackBerry)
• Apps using UIWebKit or WebBrowser
jQuery 2.0: README.NOW
• The jQuery team supports both 1.9 and
2.0; there isn't a problem of using an
"unsupported version"
• Since 1.x/2.x APIs are the same, there is
no problem in using 1.x exclusively on a
public web site -- it's recommended
• You can detect platforms and include 1.9
or 2.0, but beware of your code or
plugins using undocumented semantics!
jQuery 2.0 is Forward Looking
EcmaScript 5 is was the 2.0 baseline
Old Android Browsers Lack ES5
:-(
(-:
Old WebKit is the New Old IE
Email: [email protected]
Twitter: @davemethvin
GitHub: @dmethvin
IRC (Freenode): DaveMethvin #jquery-dev
Questions?