#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
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:2 Changed 10 years ago by
Component: | unfiled → core |
---|---|
Milestone: | None → 1.9 |
Priority: | undecided → low |
Type: | bug → feature |
Fix #13076. Speed up $() with strings, part of gh-1089.