Landing some minor perf optimization to jQuery().

This commit is contained in:
jeresig 2010-01-28 17:17:51 -05:00
parent 0db207da23
commit b8076a914b
2 changed files with 13 additions and 5 deletions

View file

@ -69,6 +69,14 @@ jQuery.fn = jQuery.prototype = {
this.length = 1;
return this;
}
// The body element only exists once, optimize finding it
if ( selector === "body" && !context ) {
this.context = this[0] = document.body;
this.selector = "body";
this.length = 1;
return this;
}
// Handle HTML strings
if ( typeof selector === "string" ) {
@ -99,7 +107,7 @@ jQuery.fn = jQuery.prototype = {
ret = buildFragment( [ match[1] ], [ doc ] );
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
return jQuery.merge( this, selector );
// HANDLE: $("#id")
@ -128,6 +136,7 @@ jQuery.fn = jQuery.prototype = {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
return jQuery.merge( this, selector );
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
@ -150,9 +159,7 @@ jQuery.fn = jQuery.prototype = {
this.context = selector.context;
}
return jQuery.isArray( selector ) ?
this.setArray( selector ) :
jQuery.makeArray( selector, this );
return jQuery.makeArray( selector, this );
},
// Start with an empty selector
@ -604,6 +611,7 @@ jQuery.extend({
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];

View file

@ -25,7 +25,7 @@ test("jQuery()", function() {
equals( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" );
// can actually yield more than one, when iframes are included, the window is an array as well
equals( 1, jQuery(window).length, "Correct number of elements generated for jQuery(window)" );
equals( jQuery(window).length, 1, "Correct number of elements generated for jQuery(window)" );
var main = jQuery("#main");