try this and see if its better:

var counter = 0;
var id = setInterval("refresh()",30);

function refresh(){
       //This doesn't leak:
       /*
       counter++;
       var children = document.getElementById("ground").childNodes;
       for(i = 0; i < children.length; i++){
               var child = children[i];
               if(child.style){
                       child.style.left = ""+counter+"px";
               }
       }*/
       // But this does a lot!
       counter++;
       $("#ground").children().each(function(index, child) {
                 $(child).css("left", counter);
       });

       // this just stops the animation after a certain time
       if(counter > 300 )clearInterval(id);
}


On Fri, Nov 14, 2008 at 7:53 AM, Selim <[EMAIL PROTECTED]> wrote:

>
> Hi,
>
> I recently discovered a rather strange behaviour under Firefox 3. I
> have been able to reproduce it on Firefox 3.0.3, 3.1b1 as well as the
> latest nightly build with TraceMonkey enabled. Neither Chrome, IE7,
> nor Opera (9.62)  exhibit this behaviour. It occurs when changing many
> time the position of a large number of elements by modifying their CSS
> attributes to generate an animation.
>
> It's not exactly a memory leak because after some times ff3 seams to
> detect it and frees the memory. But this garbage collection takes a
> lot of CPU thus making the animation very laggy at the time it occurs.
>
> This is the shortest code that I've been able to find that generate
> this. I used as few jQuery functions as possible to isolate the
> problem.
>
> var counter = 0;
> var id = setInterval("refresh()",30);
>
> function refresh(){
>        //This doesn't leak:
>        /*
>        counter++;
>        var children = document.getElementById("ground").childNodes;
>        for(i = 0; i < children.length; i++){
>                if(children[i].style){
>                        children[i].style.left = ""+counter+"px";
>                }
>        }*/
>        // But this does a lot!
>        counter++;
>        var children = document.getElementById("ground").childNodes;
>        for(i = 0; i < children.length; i++){
>                $(children[i]).css("left", counter);
>        }
>        // this just stops the animation after a certain time
>        if(counter > 300 )clearInterval(id);
> }
>
> When running this simple example you'll see the memory used by Firefox
> going up by 20 to 30mo in a mater of seconds. The full example (js
> +html) can be find at http://gamequery.onaluf.org/ff3mljq/ it uses a
> recent nightly build of jQuery but the exact same thing occurs with
> 1.2.6. Any Idea of what is going on here ? Is this a bug in firefox,
> is there something I'm doing wrong in my code?
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to