This should go in a new thread. --John
On Fri, Apr 24, 2009 at 4:54 PM, Michael Park <emp...@gmail.com> wrote: > > There is definitely a problem with the way jQuery (I'm using 1.3.2) > handles cleaning up namespaced events (I'm tracing the 'unload' event > codepath). The problem from what I can tell seems to be in > jQuery.event.remove: > > 2540 // Handle multiple events seperated by a space > 2541 // jQuery(...).unbind("mouseover mouseout", fn); > 2542 jQuery.each(types.split(/\s+/), function(index, type){ > 2543 // Namespaced event handlers > 2544 var namespaces = type.split("."); > 2545 type = namespaces.shift(); > 2546 var namespace = RegExp("(^|\\.)" + > namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); > > ...during the 'unload' event-handler codepath, this code snippet here > is expecting the passed in 'types' argument to contain the namespaced > event-identifier (ex. 'click.foo'), but instead it is getting the > common event-identifier instead (ex. 'click'). > > You can firebug-trace this yourselves with the simple examples I put up > here: > > http://emparq.com/ex/ex-good.html > http://emparq.com/ex/ex-bad.html > > ...you'll notice the only difference between these two examples is > that one binds 'click.foo' and the other binds 'click'. In the bad > example, hitting reload constantly will see the process memory useage > go up (in essense, a leak) due to 'jQuery.event.remove' not properly > cleaning up the namespaced 'click.foo' event), while the good example > will not suffer the same results. > > I'm still new-ish to jQuery and I'm not ready to hazard a solution > just yet, but I'm guessing something either needs to be done with the > way 'jQuery.event.remove' handles the value of the 'types' argument, > or this code here: > > 2531 for ( var type in events ) > 2532 this.remove( elem, type + (types || "") ); > > ...needs to be modified to properly put those namespaced suffixes back > into the second argument. I'm not familiar enough with all of the > use-cases that this function handles, so I don't know which is the > best approach. > > Can anyone else shed some light on this subject? > > > --Mike > > On Fri, Apr 24, 2009 at 12:25 PM, Andrea Giammarchi > <andrea.giammar...@gmail.com> wrote: > > hopefully interesting: > > > http://webreflection.blogspot.com/2009/04/divexpando-null-or-divremoveattributeex.html > > > > but does not solve this specific problem. > > Regards > > > > On Fri, Apr 24, 2009 at 5:29 PM, Josh Naro <joshn...@gmail.com> wrote: > >> > >> Drip seems to claim everything leaks. I've been using sIEve, and it > >> seems to give a more accurate account of the references. I also found > >> this little jQuery plugin quite useful for eliminating IE references > >> (source > >> > >> > http://groups.google.com/group/jquery-en/browse_thread/thread/b66a0d05092dbeb/7ff7e0e72722db04?lnk=gst&q=remove+leak#7ff7e0e72722db04 > ): > >> > >> jQuery.fn.discard = function(){ > >> var garbageBin = document.getElementById('IELeakGarbageBin'); > >> if (!garbageBin) { > >> garbageBin = document.createElement('DIV'); > >> garbageBin.id = 'IELeakGarbageBin'; > >> //garbageBin.style.display = 'none'; > >> document.body.appendChild(garbageBin); > >> } > >> > >> this > >> .unbind() //unbind all handlers > >> .each(function(){ // move the element to the garbage bin > >> garbageBin.appendChild(this); > >> garbageBin.innerHTML = ''; > >> }); > >> > >> garbageBin = null; > >> > >> } > >> > >> > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---