Bug Tracker

Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#13076 closed feature (fixed)

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.

Change History (2)

comment:1 Changed 10 years ago by Sebi Burkhard

Resolution: fixed
Status: newclosed

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

Changeset: d8298046311e66a47424ec3f3cbe77e97bee3958

comment:2 Changed 10 years ago by dmethvin

Component: unfiledcore
Milestone: None1.9
Priority: undecidedlow
Type: bugfeature
Note: See TracTickets for help on using tickets.