Hi Karl,

$('#foo').find('p') and $('p', $('#foo')) are approximately of the same speed.

I've put the test code on JSBin, so everybody can play around with it
and try other combinations :-)
http://jsbin.com/ifemo

by(e)
Stephan


2009/2/24 Karl Swedberg <k...@englishrules.com>:
> Hi Stephan,
> Thanks for doing this testing! Would you mind profiling $('#foo').find('p')
> as well? I suspect it will be roughly equivalent to $('p', $('#foo'))
> Cheers,
>
> --Karl
> ____________
> Karl Swedberg
> www.englishrules.com
> www.learningjquery.com
>
>
>
> On Feb 24, 2009, at 8:28 AM, Stephan Veigl wrote:
>
> Hi,
>
> I've done some profiling on this, and $("p", $("#foo")) is faster than
> $("#foo p") in both jQuery 1.2.6 and 1.3.2.
>
> the test HTML consists of 100 <p>s in a "foo" <div> and 900 <p>s in a
> "bar" <div>.
>
> However the factor differs dramatically:
> In 1.2.6 the speedup from $("p", $("#foo")) to $("#foo p") was between
> 1.5x (FF) and 2x (IE),
> while for 1.3.2 the speedup is 20x (FF) and 15x (IE).
>
> $("p", $("#foo")) is faster in 1.3.2, by a factor of 1.5 (both FF and IE),
> while $("#foo p") is _slower_ in 1.3.2 by 8.5x (FF) and 4.6x (IE).
>
> Even with an empty "bar" div $("p", $("#foo")) is faster by a factor up to
> 3x.
>
> Conclusion:
> If you have an ID selector, first get the element by it's ID and use
> it as scope for further selects.
>
> by(e)
> Stephan
> 2009/2/23 ricardobeat <ricardob...@gmail.com>:
>
> up to jQuery 1.2.6 that's how the selector engine worked (from the top
>
> down/left to right). The approach used in Sizzle (bottom up/right to
>
> left) has both benefits and downsides - it can be much faster on large
>
> DOMs and some situations, but slower on short queries. I'm sure
>
> someone can explain that in better detail.
>
> Anyway, in modern browsers most of the work is being delegated to the
>
> native querySelectorAll function, as so selector performance will
>
> become more of a browser makers' concern.
>
> - ricardo
>
> On Feb 23, 1:08 pm, Peter Bengtsson <pete...@gmail.com> wrote:
>
> I watched the John Resig presentation too and learned that CSS
>
> selectors always work from right to left.
>
> That would mean that doing this::
>
>   $('#foo p')
>
> Would extract all <p> tags and from that list subselect those who
>
> belong to #foo. Suppose you have 1000 <p> tags of them only 100 are
>
> inside #foo you'll have wasted 900 loops.
>
> Surely $('#foo') is the fastest lookup possible. Doing it this way
>
> will effectively limit the scope of the $('p') search and you will
>
> never be bothered about any <p> tags outside #foo.
>
> Or am I talking rubbish?
>
>

Reply via email to