After a long wait, jQuery 1.1.3 has been released! (Download it at the jQuery site) When I first adopted jQuery a year ago, the library boasted both faster speeds and smaller size than any other JavaScript Ajax/DOM tool. With the release of jQuery’s version 1.1.2, a number of jQuery’s operations became very slow and inefficiencient, as evidenced by MooTool’s SlickSpeed CSS Selector Test (found via Ajaxian) which crept up a few weeks ago.
This new release boasts an 800% speed improvement with a number of its selectors along with various enhancements across the board! The selector speed boost makes me one happy camper. Check out the enhancements as it compares to 1.1.2:
Browser | jQuery 1.1.2 | jQuery 1.1.3 | % Improvement |
---|---|---|---|
IE 6 | 4890ms | 661ms | 740% |
Firefox 2 | 5629ms | 567ms | 993% |
Safari 2 | 3575ms | 475ms | 753% |
Opera 9.1 | 3196ms | 326ms | 980% |
Average improvement: | 867% |
And here’s how it now stacks up against the SlickSpeed test:
Browser | Prototype | jQuery | Mootools | Ext | Dojo |
---|---|---|---|---|---|
IE 6 | 1476ms | 661ms | 1238ms | 672ms | 738ms |
Firefox 2 | 219ms | 567ms | 220ms | 951ms | 440ms |
Safari 2 | 1568ms | 475ms | 909ms | 417ms | 527ms |
Opera 9.1 | 220ms | 326ms | 217ms | 296ms | 220ms |
In addition to the speed enhancements, there were several other notable things:
- Unicode Selectors: Yup…now you can use fancy non-english characters.
- Escape Selectors: This is awesome. Now, if you use weird characters (i.e. punctuation) in a class/id name, you can now escape those characters within the selector syntax. E.g. $(“div#foo\.bar”)
- Inequality Selector: You can now select elements where their attributes do not match a specific string of characters. E.g. $(“div[@id!=test]“)
- :nth-child() improvements: jQuery has supported selectors like :nth-child(1) and :nth-child(odd) since the beginning of jQuery, now they’ve added advanced :nth-child selectors, such as:
- $(“div:nth-child(2n)”)
- $(“div:nth-child(2n+1)”)
- $(“div:nth-child(n)”)
- Space-separated attributes: After being removed in jQuery 1.0, this selector has now been brought back by popular demand. It allows you to locate individual items in a space-separated attribute (such as a class or rel attribute). E.g. $(“a[@rel~=test]“)
- Animation Improvements: Animations are now significantly faster and smoother. Additionally, you can run more simultaneous animations without incurring any speed hits.
- DOM Event Listeners: Internally, the jQuery Event system has been overhauled to use the DOM Event system, rather than the classical “onclick” style of binding event handlers. This improvement allows you to be more unobtrusive in your use of the library (not affecting the flow of other libraries around it). Additionally, it helped to resolve some of the outstanding issues that existed with binding event listeners to IFrames.
- Event Normalization: Some great steps have been taken to normalize keyboard and mouse events. You can now access the event.which property to get most details about the specific key or button that was pressed.
- Multiple .is(): The .is() method can now take multiple selectors, separated by a comma. This allows you to test your jQuery set against multiple selectors. E.g. $(“div”).is(“:visible, :first”)
- Browser Version: A commonly requested feature, by plugin authors, was a way to determine what browser version their users were using. We now expose an extra property through which this information can be accessed. E.g. jQuery.browser.version
Additionally, the jQuery team has addressed 80+ bugs and has roadmapped out the next two releases (v1.1.4 and v1.2). To check out the full jQuery 1.2 roadmap, go here.