I recently had a quick look at the new jQuery Sizzle, i was wondering if there is any significant performance difference between using Sizzle.matchesSelector or assessing directly the attribute of the element parameter :
$.expr.createPseudo(function(selector) {
return function( elem ) {
return elem.getAttribute('data-smth').match(/someRegex/)
}
}
VS :
$.expr.createPseudo(function(selector) {
return function( elem ) {
return $.find.matchesSelector(elem, 'div.someClass[data-smth*=smth]')
}
}
I find personaly matchesSelector easier since we keep on jquery level and we can add easily some constraints (.someClass in my exemple above)
The difference is that .matchesSelector()
is a function that is either native or a custom one created by the Sizzle developers. In the case of a native function, the difference, although .getAttribute()
would still be faster, would be lesser. However, in case of a custom function, the difference would be greater, definitely in favor of .getAttribute()
.
.matchesSelector()
, however, safely queries attributes, so that is something to keep in mind.