Is .find() faster than basic descendant selecting

2019-02-17 00:57发布

问题:

Slide 30 in Paul Irish's blog mentioned:

$('#container').find('div.robotarm') is faster than $('#container div.robotarm')

Is this true?

回答1:

Maybe in an earlier version of jQuery that was the case. However, the expression

$('#container div.robotarm')

is normalized through jQuery into

$('#container').find('div.robotarm')

So the only reason why $('#container div.robotarm') should be slower is because of function call overhead. But, that would really be a trivial difference.

If that call wasn't normalized, sizzle (Resigs css selector engine) would be used to lookup that element (right to left). That of course would be much slower.



回答2:

Since you asked for opinion, it doesn't matter.

You can always come up with a case where one runs faster than the other in some browser under a certain configuration of the DOM. No need to split hairs.



回答3:

This is only correct when searching by ID.

But when we search by tag name it returns different results in modern browsers where $('div').find('p') is slower than $('div p') because the latter uses querySelector().