[dojo-contributors] IE7 leaks and testBench

Scott J. Miles sjmiles at turboajax.com
Wed Aug 8 17:00:11 EDT 2007


That article describes the classic leak pattern in IE < 7 that has 
mostly been fixed in IE7 (and on IE6 with the latest updates). I don't 
see any information there specifically relating to IE7.

 > Note that this leak can occur ANY time a DOM node is created and an
 > event handler is attached to the DOM node before the DOM node is
 > appended to the document.

My tests indicate that this is not so (again, IE7). As long as the node 
ends up as part of the document, the repaired GC in IE7 seems to clean 
it up.

Do you have a test case?

Regards,
Scott J. Miles
TurboAjax Group
http://www.turboajax.com

Michael Smith wrote:
> Here's a link to an excellent article detailing this leak pattern in IE. 
> To my knowledge, this leak has not yet been fixed in IE7.
> 
> http://www.codeproject.com/jscript/LeakPatterns.asp 
> <http://www.codeproject.com/jscript/LeakPatterns.asp>
> 
> Note that this leak can occur ANY time a DOM node is created and an 
> event handler is attached to the DOM node before the DOM node is 
> appended to the document. So, this is broader than just the "temp" 
> scenario that you describe. It applies to programmatic DOM manipulation 
> in general.
> 
> To be safe never add an onclick (or any other) event handler to a DOM 
> node before it has been appended to the document.
> 
> Cheers,
> ~Michael
> 
> 
> On 8/8/07, * Scott J. Miles* <sjmiles at turboajax.com 
> <mailto:sjmiles at turboajax.com>> wrote:
> 
>     So, it appears that IE7 still has a basic DOM-JS circular reference leak
>     pattern. The variation in IE7 seems to be that it only occurs when the
>     DOM node is not part of a document.
> 
>     We see this problem in spades in testBench because the created widgets
>     are attached to a temp node that is never attached to any document.
> 
>     Inserting:
> 
>     +65 document.body.appendChild(tmpNode);
> 
>     into testBench makes the reported leaks go away (c.f.
>     http://trac.dojotoolkit.org/ticket/3531 and
>     http://trac.dojotoolkit.org/ticket/4046).
> 
>     I'm not sure how often this happens in real life, so this may be
>     less of
>     a problem than it appears.
> 
>     I would suggest that code that produces phantom nodes (and attaches
>     events to them) should be responsible for making them go away (vs.
>     trying to solve this in event code). Otoh, running the Dijit cleanup
>     code in IE7 could provide a measure of blind protection (with some costs
>     at unload-time).
> 
>     I did some basic Googling, but I didn't find any reference to this
>     problem specifically on IE7 (although I seem to be pretty bad at
>     writing
>     Google queries).
> 
>     Regards,
>     Scott J. Miles
>     TurboAjax Group
>     http://www.turboajax.com
>     _______________________________________________
>     dojo-contributors mailing list
>     dojo-contributors at dojotoolkit.org
>     <mailto:dojo-contributors at dojotoolkit.org>
>     http://dojotoolkit.org/mailman/listinfo/dojo-contributors
>     <http://dojotoolkit.org/mailman/listinfo/dojo-contributors>
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> dojo-contributors mailing list
> dojo-contributors at dojotoolkit.org
> http://dojotoolkit.org/mailman/listinfo/dojo-contributors



More information about the dojo-contributors mailing list