I re-ran the test now. test('#content a.submit'); test('a.submit'); test('.submit'); test('("#content").find("a.submit")');
Basically I get the same result: for my pages (!) element.MyClass has the best average performance. I guess it's as Karl mentioned earlier: "If the selectors aren't causing a discernible bottleneck, I wouldn't worry too much about optimizing them." But it's interesting to play around with those tests. :) Cheers On 3 Jul., 09:28, olsch01 <ollo...@web.de> wrote: > @Karl: ohhhh, that was a serious c&p "bug"... :) I was aware that IE6 > and 7 don't support getElementsByClassName (see my initial message), > still the results of my first test showed similar results for the > class selector. I hope I didn't have another c&p bug in there... ;) > > @Mike: the pages I'm working on are rather simple (at least compared > to something like the Yahoo homepage). So I guess using > element.MyClass as a selector is fine for me. I already thought that > descending from the closest parent ID come into play, when you have a > lot of elements on your page. > > Thanks guys! > > On 3 Jul., 01:57, "Michael Geary" <m...@mg.to> wrote: > > > You can't measure whether one selector will be faster than another on all > > possible pages. All you can measure is which is faster on the page you're > > testing. > > > On a page with only a single <a> element, an 'a.submit' or even just an 'a' > > selector will be faster than '#content a.submit', because it's doing less > > work. It will find that <a> element right away, and since that's the only > > <a> element, you're done right there. Starting the search from #content > > makes no difference except to take extra time. > > > Contrast that with a page with a thousand <a> elements, where only a few of > > those elements (or just one) are inside the #content element. Now using > > '#content a.submit' will pay off, because it saves jQuery from having to > > scan through all the other <a> elements - it only has to look at the ones > > inside the #content element. > > > This will vary by browser and by jQuery version, but the point to keep in > > mind is that selectors perform differently in very complex pages - and of > > course those are the pages where you care the most. > > > -Mike > > > > From: olsch01 > > > > Hi Karl, > > > > thanks for your reply. > > > > I used jQuery tester in FF2 + 3, IE6, 7 + 8, Opera 9.64 and I > > > think also in Safari 4 (on my Win XP machine). The results > > > were are all kinda similar. Using the class selector was > > > always fastest. > > > > I just ran the following test (choosing jQuery 1.3.2 again): > > > > test('#content a.submit'); > > > test('a.submit'); > > > test('.submit'); > > > test('("#myDiv").find("span.myClass")'); > > > > The results in FF3: > > > > #content a.submit: 0.448s > > > a.submit: 0.344s > > > .submit: 0.331s > > > ("#myDiv").find("span.myClass"): 0.399s > > > > The results for IE are a bit strange and different from my > > > earlier results. > > > > IE6: > > > > #content a.submit: 1.641s > > > a.submit: 1.438s > > > .submit: 4.172s > > > ("#myDiv").find("span.myClass"): 4.484s > > > > IE7 (IE Tester tool): > > > > #content a.submit: 2.046s > > > a.submit: 1.922s > > > .submit: 4.969s > > > ("#myDiv").find("span.myClass"): 4.562s > > > > IE8 (also IE Tester tool): > > > > #content a.submit: 0.25s > > > a.submit: 0.219s > > > .submit: 0.219s > > > ("#myDiv").find("span.myClass"): 3.578s > > > > So only using the class name is much slower here. > > > > Looking at my earlier test and this one, "a.submit" (i.e. > > > element.myClass) has shown the best overall performance . > > > > Any comments? :) > > > > Cheers > > > > On 2 Jul., 19:36, Karl Swedberg <k...@englishrules.com> wrote: > > > > On Jul 2, 2009, at 8:45 AM, north wrote: > > > > > > Hi, > > > > > > I just tested all my jQuery selectors using the jQuery Tester > > > > > (http:// jquery.nodnod.net), and the results seem to "contradict" > > > > > one thing I read in a performance article: that you > > > should descend > > > > > from the closest parent ID when using classes in your > > > selector (the > > > > > article says "April 09", so the latest jQuery version was > > > already available). > > > > > > In my tests, using just the class selector (like > > > span.myClass) was > > > > > always fastest (sometimes twice as fast as #myDiv > > > span.myClass), and > > > > > this in all browsers I tested, not just the ones supporting > > > > > getElementsByClassName. > > > > > > Maybe descending from the closest parent ID becomes a factor when > > > > > you have a lot of elements on you page? Any experiences? > > > > > > Thanks > > > > > If the selectors aren't causing a discernible bottleneck, I > > > wouldn't > > > > worry too much about optimizing them. Just out of > > > curiosity, though, > > > > what happens if you do this: > > > > > $('#myDiv').find('span.myClass'); > > > > > any faster? > > > > > Also, which browser are you testing? > > > > > --Karl