Skip to content

Commit

Permalink
Add event cleanup on Element#update and Element#replace so that repla…
Browse files Browse the repository at this point in the history
…ced content does not leak memory. [#28 state:resolved]
  • Loading branch information
savetheclocktower committed Apr 18, 2008
1 parent 35cea73 commit 3d27a63
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG
@@ -1,3 +1,5 @@
* Add event cleanup on Element#update and Element#replace so that replaced content does not leak memory. (jddalton, Andrew Dupont)

* Loop through all elements and remove all handlers on page unload. IE needs this in order to prevent memory leaks. (kangax, jddalton, Andrew Dupont)

* Fix issue where IE fails to GC when the page is navigated away from before it's done loading. (jddalton, Andrew Dupont)
Expand Down
21 changes: 21 additions & 0 deletions src/dom.js
Expand Up @@ -877,6 +877,27 @@ else if (Prototype.Browser.IE) {
onchange: v._getEv
});
})(Element._attributeTranslations.read.values);

// Wrap Element#update and Element#replace to clean up event handlers on
// newly-removed elements. Prevents memory leaks in IE.
Element._purgeObservers = function(element, includeRoot) {
Element.select(element, '*').each(Event.stopObserving);
if (includeRoot === true) Event.stopObserving(element);
};

Element.Methods.update = Element.Methods.update.wrap(
function(proceed, element, contents) {
Element._purgeObservers(element, false);
return proceed(element, contents);
}
);

Element.Methods.replace = Element.Methods.replace.wrap(
function(proceed, element, contents) {
Element._purgeObservers(element, true);
return proceed(element, contents);
}
);
}

else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
Expand Down

0 comments on commit 3d27a63

Please sign in to comment.