I've recently been tasked with ferreting out some memory leaks in an application for my work. I've narrowed down one of the big leaks to a jquery plugin. It appears we're using a modified version of a popular context menu jquery plugin.
It looks like one of the developers before me attempted to add a destroy method. I noticed it wasn't very well written and attempted to rewrite. Here's the meat of my destroy method:
var recursiveUnbind = function(node) {
$
(node).unbind();
//$(node).empty().remove();
$
.each(node, function(obj) {
recursiveUnbind
(obj);
});
};
$
.each(menu, function()
{
recursiveUnbind
(menu);
});
$
(menu).empty().remove();
In my mind this code should blow away all the jquery event binding and remove the dom elements, yet still the plugin leaks gobs of memory in IE7.
The modified plugin with a test page can be found here:
http://www.olduglyhead.com/jquery/leaks/ Clicking the button repeatedly will cause IE7 to leak a bunch of memory.