Skip to main content

Bug Tracker

Side navigation

#13076 closed feature (fixed)

Opened December 18, 2012 05:25PM UTC

Closed December 23, 2012 08:12PM UTC

Last modified January 08, 2013 11:53PM UTC

Performance optimization (10-30%) for $("some-selector")

Reported by: hasclass Owned by:
Priority: low Milestone: 1.9
Component: core Version: git
Keywords: Cc:
Blocked by: Blocking:
Description

The $( ) function currently has a bottleneck when querying with a string (primitive).

I optimized the method and it gets a performance boost of 0-30% depending on browser:

http://jsperf.com/jquery-init-optimized

This is the current implementation of $( ). The first if clause checks for a nodeType property. When passing a String primitive this property check causes that string to be converted into a String wrapper object. Which slows everything down.

init: function( selector, context, rootjQuery ) {
  // ...
	// HANDLE: $(DOMElement) check first that selector is not a primitive
	if ( selector.nodeType ) { // ..
	}
	// Handle HTML strings
	if ( typeof selector === "string" ) {
	

The solution is to check first if selector is not a primitive (using typeof === 'object'). This has the effect that selector is not coerced to a string wrapper object. Typeof is fast.

init: function( selector, context, rootjQuery ) {
  // ...
	// HANDLE: $(DOMElement) check first that selector is not a primitive
	if ( typeof selector === "object" && selector.nodeType ) { // ..
	}
	// Handle HTML strings
	if ( typeof selector === "string" ) {
	

I'll create a pull request shortly.

Attachments (0)
Change History (2)

Changed December 23, 2012 08:12PM UTC by Sebi Burkhard comment:1

resolution: → fixed
status: newclosed

Fix #13076. Speed up $() with strings, part of gh-1089.

Changeset: d8298046311e66a47424ec3f3cbe77e97bee3958

Changed January 08, 2013 11:53PM UTC by dmethvin comment:2

component: unfiledcore
milestone: None1.9
priority: undecidedlow
type: bugfeature