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.
Fix #13076. Speed up $() with strings, part of gh-1089.
Changeset: d8298046311e66a47424ec3f3cbe77e97bee3958