|Franck Marcia||Mar 25, 2006 7:13 am|
|Dave Methvin||Mar 25, 2006 8:55 am|
|Franck Marcia||Mar 25, 2006 9:08 am|
|John Resig||Mar 25, 2006 9:15 am|
|Dave Methvin||Mar 25, 2006 10:07 am|
|Michael Geary||Mar 25, 2006 10:07 am|
|Franck Marcia||Mar 25, 2006 10:39 am|
|Michael Geary||Mar 25, 2006 10:56 am|
|Dave Methvin||Mar 25, 2006 11:05 am|
|Franck Marcia||Mar 25, 2006 1:45 pm|
|Michael Geary||Mar 25, 2006 2:19 pm|
|Franck Marcia||Mar 25, 2006 5:16 pm|
|Dave Methvin||Mar 26, 2006 9:02 am|
|Michael Geary||Mar 26, 2006 1:24 pm|
|Franck Marcia||Mar 28, 2006 2:25 am|
|Dave Methvin||Mar 28, 2006 5:45 am|
|John Resig||Mar 28, 2006 7:30 am|
|Franck Marcia||Mar 28, 2006 8:26 am|
|jqu...@vikas.mailshell.com||Mar 28, 2006 8:57 am|
|John Resig||Mar 28, 2006 9:03 am|
|Michael Geary||Mar 28, 2006 9:14 am|
|jqu...@vikas.mailshell.com||Mar 28, 2006 9:24 am|
|Subject:||[jQuery] Memory leaks forever|
|From:||John Resig (jere...@gmail.com)|
|Date:||Mar 25, 2006 9:15:13 am|
Doug's code is really interesting and it seems like it'd be simple enough to integrate into the .html() .empty() and .remove() functions.
But I'm confused, it doesn't seem like it would help Franck's code as he's not removing any elements - should some sort of auto-clean-up be run when the page is unloaded, for IE? I do keep a reference to all events that were added using bind/addEvent, so that is a possibility.
Let me know.
On 3/25/06, Dave Methvin <dave.methvin at gmail.com> wrote:
Is it because of the code structure? Because I'm using static functions? Did I misuse jQuery?
This looks like the memory leak that occurs when you remove an element but still have event functions bound to it. Mike Geary pointed to a paper on this in an earlier thread:
However, I am wondering about the goodness of that paper because the code examples look weird. I thought that document.createElement just took a tag name and they are passing it HTML?
Doug Crockford has some code that demonstrates and fixes the problem:
It might be fixed if JQuery methods null out events whenever they are removing DOM nodes, such as in empty() or remove(). Otherwise you'd need to unbind() events manually any time you're removing nodes. It also has to be done whenever you leave or reload a page (by binding to the unload event).
_______________________________________________ jQuery mailing list discuss at jquery.com http://jquery.com/discuss/
-- John Resig http://ejohn.org/ jeresig at gmail.com