jQuery 1.4.2 Released

Posted on by

jQuery 1.4.2 is now out! This is the second minor release on top of jQuery 1.4, fixing some outstanding bugs from the 1.4 release and landing some nice improvements.

I would like to thank the following people that provided patches for this release: Ben Alman, Justin Meyer, Neeraj Singh, and Noah Sloan.

Downloading

As usual, we provide two copies of jQuery, one minified (we now use the Google Closure Compiler as the default minifier) and one uncompressed (for debugging or reading).

You can feel free to include the above URLs directly into your site and you will get the full performance benefits of a quickly-loading jQuery.

Additionally you can also load the URLs directly from either Google or Microsoft’s CDNs:

New Features

A full list of the API changes can be found in the 1.4.2 category on the jQuery API site.

In this release we’ve added two new methods: .delegate() and .undelegate(). These methods serve as complements to the existing .live() and .die() methods in jQuery. They simplify the process of watching for specific events from a certain root within the document.

For example:

$("table").delegate("td", "hover", function(){
	$(this).toggleClass("hover");
});

This is equivalent to the following code written using .live():

$("table").each(function(){
	$("td", this).live("hover", function(){
		$(this).toggleClass("hover");
	});
});

Additionally, .live() is roughly equivalent to the following .delegate() code.

$(document).delegate("td", "hover", function(){
	$(this).toggleClass("hover");
});

What’s Changed?

There has been some large code rewrites within this release, both for performance and for fixing long-standing issues.

Performance Improvements

As is the case with virtually every release of jQuery: We’ve worked hard to continue to improve the performance of the code base, making sure that you’re provided with the best performing JavaScript code possible.

According to the numbers presented by the Taskspeed benchmark we’ve improved the performance of jQuery about 2x compared to jQuery 1.4.1 and about 3x compared to jQuery 1.3.2.

jQuery Taskspeed Results (Feb 14, 2010)

Specifically we’ve improved the performance of 4 areas within jQuery:

While comprehensive benchmarks like Taskspeed can be interesting if deconstructed into individual sub-tests for further study, as a project we tend to stay away from using them as an accurate measure of true, overall, library performance. Considering how many aspects make up a library, not to mention the different techniques that they offer, cumulative results rarely reflect how an actual user may use a library.

For example, we saw significant overall performance speed-ups in Taskspeed simply by optimizing the $("body") selector because it’s called hundreds of times within the tests. Additionally we saw large gains by optimizing .bind() and .unbind() by a fraction of a millisecond – an inconsequential amount – especially considering that any cases where you would bind hundreds of events you would likely want to use .live() or .delegate() instead.

We’ve collected some results from the other major libraries as well but are less interested in those results and far more interested in the performance improvements that we’ve made relative to older versions of jQuery itself.

We will continue to work on optimizing the jQuery code base – indefinitely. It’s always a major concern for us to try and provide the fastest JavaScript/DOM-development experience possible. And yes, there will likely always be ways to gain additional performance – either through internal optimizations or by pushing critical functionality off into browser-land for standardization.

Event Rewrite

The largest internal changes have come through a much-needed structural rewrite of the events module. Many quirky issues related to event binding have been resolved with these fixes.

Namely event handlers are no longer stored as object properties in jQuery’s internal object store (with metadata attached to the handlers). Instead they’re now stored within an internal array of objects.

If you’ve ever had the opportunity to play around with .data("events") on a jQuery element you would find that it returns an object with all the event types currently bound, within it.

To enumerate some of the changes that have occurred during this rewrite:

  • It’s now possible to bind identical handlers with different data, namespaces, and event types universally.
  • Execution of event handlers will continue after one handler removes itself (or its sibling handlers).
  • We no longer attach data/namespace information directly to the event handlers (only a unique tracking ID).
  • We no longer use proxy functions, internally, to try and encapsulate handlers.
  • Execution order of events is now guaranteed in all browsers. Google Chrome had a long-standing error in their object-looping logic that has been routed around.

As a side-effect of these changes we had to change the newly-exposed special add/special remove APIs in order to accommodate the new event data objects. Ben Alman is in the process of writing up a large tutorial on jQuery’s special event system and we will be making additional announcements when that occurs.

Bug Fixes

There were a total of 40 tickets closed in this minor release. Some relating to differences between jQuery 1.3.2 and jQuery 1.4.x, some fixing long-standing issues (like in the case of the event module rewrite).

Raw Data

This is the raw data that we collected to generate the aforementioned charts.

	jQuery 1.3.2	jQuery 1.4.1	jQuery 1.4.2	Prototype 1.6.1	MooTools 1.2.4	Dojo 1.4.1	YUI 3.0.0
FF 3.5	2182	806	 565	 2156	 1073	 575	 1885
FF 3.6	1352	677	 519	 2067	 857	 750	 1494
Opera	983	697	 222	 793	 678	 218	 1201
Safari	610	435	 252	 315	 235	 238	 612
Chrome	1591	703	 293	 271	 312	 222	 745
IE 8	2470	1937	 1141	 3045	 4749	 1420	 2922
IE 7	4468	3470	 1705	 9863	 10034	 1737	 5830
IE 6	6517	4468	 2110	 13499	 11453	 2202	 7295

jQuery.org

Posted on by

Today we’re pleased to announce the brand new jQuery.org web site: The home of the jQuery project.

jQuery.org

The jQuery.org site was designed and implemented by jQuery community member Boaz Sender.

You may recognize most of the content from the old jQuery Docs site but it’s been heavily re-organized and presented in a manner more befitting of the larger jQuery project.

jQuery.org: Team jQuery.org: History jQuery.org: About

jQuery.org: License jQuery.org: Donate

This launch goes along with the formalization of the jQuery project, back from when we joined the Software Freedom Conservancy. Having an official home for the larger jQuery project should be good for future growth and organization in the project as a whole. You can learn more about this organization in this video about the jQuery project.


Originally published at 14 Days of jQuery (archived).

New jQuery Forum

Posted on by

Today we’re officially announcing the brand new jQuery Forum. We’ve been using mailing lists, and subsequently Google Groups, over the past 4 years to manage the discussion and community around jQuery. That particular solution has simply not been able to scale to our discussion requirements both in terms of participation and in managing spam.

New jQuery Forum

When looking for a new area to have discussions, we looked at a wide variety of solutions with a few major requirements: It had to be capable of handling both regular discussions and the now-ubiquitous question & answers that occur. Additionally, we wanted something that lowered the barrier to asking a question — something that anyone would be able to use (thus it had to have a good web interface).

We also wanted a solution that would have a low maintenance threshold for the team. This would mean either using a hosted solution in which the team we were working with was very accommodating or using a solution that we host ourselves that was trivially easy to use and had a good community of developers.

We ended up analyzing countless solutions, but in the end we chose to go with Zoho Discussions (Zoho’s announcement about the move). A combination of decisions drove us to this decision:

  • Zoho Discussions seamlessly integrates both regular, forum-style, discussions and Q&A. Additionally, all the moderation and administration tools are designed around building and managing a slick workflow for answering questions and concerns.
  • The Discussions team at Zoho have been incredibly accommodating. They are not only providing all the hosting for free but going out of their way to fix concerns and integrate our full Google Groups back history. We’ve been working very closely with them, and they’ve fixed, or are fixing, every issue that we’ve brought forward.

The jQuery team has transitioned to using the new forum over the past week and have been very pleased with how it’s been working out thus far. Most of the old Google Groups and all of the old jQueryHelp.com posts have been integrated into the new system. We will be doing a final import of the Google Groups posts once we finally close the groups in the next week or two.

We’ve opened up a number of individual forums for discussion.

As time goes by, we’ll certainly open more as needs arise — especially ones for non-English speaking users.

As it stands the two largest outstanding issues that are being actively worked on are:

  • There is no way to receive email updates of all posts. You can receive email updates for individual posts that you subscribe to, and you receive email updates for posts that you create, but it’s not possible to subscribe to all of them simultaneously. In the meantime we recommend that you subscribe to the forum RSS feed as a way to see all posts and replies.
  • Many of the pages on the site are being loaded in an “Ajax” manner which is being replaced with a more traditional (and appropriate) page load. The full transition should be complete very soon.

We’ve collected a number of smaller issues and are communicating actively with the Zoho Discussions team. If you find any more issues please feel free to post them to the About the jQuery Forum forum.

As mentioned before, we analyzed a number of discussion solutions — dozens, in fact. There are a few that we were quite pleased with and were in the final running.

  • Stack Overflow is pretty much the undisputed king of web-based Q&A. There is already an active community of jQuery users there, as well. We looked at both adopting the existing Stack Overflow community and setting up a Stack Exchange as possible solutions. However, both of those left a major gap: They were not suited to handling regular, non-Q&A, discussions. If we were to use either of those solutions, we would have to set up an additional forum or mailing list just to have plain discussions. In the end we decided to not move ahead with these solutions in favor of something that provided a more-unified community.
  • We also looked at many traditional forum solutions such as Vanilla Forums. Out of all the ones that we looked at, Vanilla Forums proved to be the best structured towards our needs. With an active and organized plugin community, we were able to find many solutions to our problems. However, in the end there was no good way to provide consistent Q&A using Vanilla, or a set of plugins, exclusively. We would end up having to use it in conjunction with Stack Overflow or another service. Also, we would have to host and develop the solution completely by ourselves, which requires time that we would rather spend in other ways.
  • We also looked at better mailing list solutions, like Librelist, but they don’t provide any sort of simple web interface (at least not in the way that forum solutions do), making it very difficult for new users to participate and get questions answered. We really have no interest in going back to the old discussion techniques of Google Groups and other mailing list providers.

We want to take this opportunity to thank the Zoho Discussions team for all their hard work in helping us transition over to their software. They’ve been incredibly helpful and we’re very excited to to be working with them.

Additionally we want to thank Chrys Bader, Mike Branski, and the rest of the community at the old jQueryHelp.com forum for being supportive and willing to integrate into the new forum setup.

Thanks again to everyone for their help in this transition. We hope to work out most of the kinks very quickly and are looking to smooth sailing from here on out. Feel free to hop onto the forums and be sure to report any problems that you may have.


Originally published at 14 Days of jQuery (archived).

14 Days of jQuery and the New API Browser

Posted on by

It’s the start of a new year, and the jQuery team’s been hard at work. We’ve been up day and night working to crank out the upcoming jQuery 1.4 release, and there’s a LOT to announce! So much, in fact, that we’ll need fourteen full days to get it all out there… As such, I’d like to announce The 14 Days of jQuery 1.4!

The New jQuery 1.4 Site

Beginning on January 14th, we’ll start a fourteen-day event. Each day we’ll have fresh videos and announcements — there’ll be code releases, project-related updates, and jQuery UI goodness, among other things. In addition to the announcements, we’ll also be releasing a set of videos over the 14 days with talks and tutorials relating the jQuery 1.4 release and other general jQuery topics. You’ll want to check back at jQuery14.com every day during the two weeks to see what’s new, or sign up to be notified via email. Think of it like an online conference, only longer, freer, and with a bit of mystery and suspense!

But Wait, There’s More!

We’ve got a lot planned for January 14th, but it seemed good to whet your appetite and pre-release some tasty jQuery morsels. Head over to jQuery14.com to learn all about the brand-new jQuery API site:

Be sure to subscribe to the jQuery14.com site or to the @jquery Twitter account for all the updates during these upcoming weeks.

Free Books, Anyone?

The jQuery project is a non-profit, open-source effort, and we rely heavily on donations and contributions to help fund everything we do. We’ll be running a fundraising drive starting now and throughout the 14 Days of jQuery. If you’re a jQuery user, show your support by making a tax-deductible donation of $20 USD or more to the project during the event, and you’ll receive a free jQuery book with your donation.

It’s always important to mention that much of this would not be possible without the help of the jQuery project sponsors; Netflix, JupiterIT Consulting, appendTo, Fusionary Media and Oxide Design Co have all signed on as official sponsors of the 14 Days of jQuery 1.4, along with our favorite jQuery book publishers, Manning, Packt, jQuery Enlightenment, and O’Reilly.

That’s it for now — head on over to jQuery14.com for much more to come!

jQuery 1.4 Alpha 2 Released

Posted on by

jQuery 1.4 Alpha 2 is released! This is the second alpha release of jQuery 1.4 (alpha 1 was released previously). The code is stable (passing all tests in all browsers we support), feature-complete (we’re no longer accepting new features for the release), and needs to be tested in live applications.

Grab the code:

NOTE: If you’re using jQuery 1.4a2 and you run into an error please make sure that you’re using the regular version of the code, it’ll make it easier to spot where the error is occurring.

How can I help?

To start, try dropping the above un-minified version of jQuery 1.4a2 into a live application that you’re running. If you hit an exception or some weirdness occurs immediately login to the bug tracker and file a bug. Be sure to mention that you hit the bug in jQuery 1.4a2!

We’ll be closely monitoring the bug reports that come in and will work hard to fix any inconsistencies between jQuery 1.3.2 and jQuery 1.4.

With your input we should be able to produce a solid release. Right now we’re looking to push out at least one beta around the beginning of the new year and a final release candidate early in January. The final release will occur on January 14th, coinciding with jQuery’s 4th birthday. Thanks for your help in reviewing jQuery 1.4a2!

jQuery 1.4 Alpha 1 Released

Posted on by

Hot off the presses: jQuery 1.4 Alpha 1 is released! This is the first alpha release of jQuery 1.4. The code is stable (passing all tests in all browsers we support), feature-complete (we’re no longer accepting new features for the release), and needs to be tested in live applications.

Grab the code:

NOTE: If you’re using jQuery 1.4a1 and you run into an error please make sure that you’re using the regular version of the code, it’ll make it easier to spot where the error is occurring.

How can I help?

To start, try dropping the above un-minified version of jQuery 1.4a1 into a live application that you’re running. If you hit an exception or some weirdness occurs immediately login to the bug tracker and file a bug. Be sure to mention that you hit the bug in jQuery 1.4a1!

We’ll be closely monitoring the bug reports that come in and will work hard to fix any inconsistencies between jQuery 1.3.2 and jQuery 1.4.

What to Watch For

There are a few areas in jQuery that have seen extensive changes since 1.3.2 was released:

  • live was drastically overhauled and now supports submit, change, mouseenter, mouseleave, focus, and blur events in all browsers. Also now supports context and data.
  • append, prepend, etc. have been heavily optimized.
  • add has been adjusted to always return elements in document order.
  • find, empty, remove, addClass, removeClass, hasClass, attr, and css have been heavily optimized.

Full details concerning the release are forthcoming – for now we just need your help in catch regressions. Some more details can be found in John Resig’s keynote at the 2009 jQuery Conference.

Note: There are still a few open bugs that we will be reviewing before jQuery 1.4 final is released.

With your input we should be able to produce a solid release. Right now we’re looking to push out at least one more alpha before the holiday season and a final release candidate early in January. Thanks for your help in reviewing jQuery 1.4a1!