thank you all for quick and quality replys... I am re-writing my script to accomodate new suggestions. and profile my function again to check any improvement.
Thanks, Amit On Dec 3, 2007 10:36 AM, Dave Methvin <[EMAIL PROTECTED]> wrote: > > > > I want to improve performance for following snipet when run for 1000 > times. > > > > jQuery(".Grid_Item,.Grid_AltItem").each( function() { //begin for-each > TR > > id = jQuery(this).find(".IdCell").text(); > > foo = jQuery(this).find("#foo").val(); > > bar = jQuery(this).find("#bar").val(); > > }); > > Since there is no document.getElementsByClassName, that selector is > going to take two complete passes through the entire document to get > the two classes, then join the two result sets together. Since you are > dropping into an .each() anyway, you might as well just get all TR > elements and filter them yourself. > > The other uses of the jQuery selectors inside the .each() can be > replaced by using the childNodes array of the TR directly. > > jQuery("#myTable tr").each( function() { > if ( !/Grid_Item|Grid_AltItem/.test(this.className) ) > return; > var kids = this.childNodes; > var Id = jQuery(kids[2]).text(); > var foo = kids[8].firstChild.value; > var bar = kids[9].firstChild.value; > .... > }); > > For fastest operation, you can substitute this for the Id line: > > var Id = kids[2].textContent || kids[2].innerText; > > All of these optimizations only work if you guarantee that the table > is laid out strictly as you specified. Otherwise you'll need to insert > a bunch of error checks to make sure you don't follow empty firstChild > objects etc. > -- Know that you are special but be ordinary. -Sri Sri Ravisankar