EventHandler löschen, bevor man DOM Node entfernt? Memory Leaks?
Christian S.
- javascript
Hallo,
habe mal eine Frage, ob bei folgendem Szenario (IE) Memory Leaks entstehen.
Ich füge per JavaScript über DOM Methoden neue DOM Elemente ins DOM ein.
An jedes neue DOM Element kommt auch ein Eventhandler dran.
Wie der erfahrene Entwickler weiß, entstehen dadurch Memory Leaks im IE.
Nun entferne ich die Nodes wieder. Muss ich dann vor dem Entfernen auch noch meine EventHandler entfernen?
Beispiel:
var table = document.createElement(table);
for (var i = 0; i < 5; i++)
{
var tr = table.insertRow();
// hier über attachEvent oder addEventListener ein Event an tr registrieren.
}
while (table.rows.length)
{
// hier event entfernen notwendig????
table.deleteRow();
}
Macht es außerdem noch einen Unterschied, ob ich den table noch ins DOM einhängen muss? Also in bestehendes DOM. Hab mal gelesen, dass man z.B. keine Kindelement an Elemente anhängen soll, die "noch in der Luft hängen", die also selbst kein elternelement haben. Was ist da dran?
Gruß
Hi,
habe mal eine Frage, ob bei folgendem Szenario (IE) Memory Leaks entstehen.
Ja, mit der Thematik hab' ich mich auch mal intensiver auseinandergesetzt - aber inzwischen das meiste wieder vergessen :-)
Aber zum Glueck vergisst del.icio.us ja nix - deshalb mal ein paar Links zur Thematik:
Memory Leakage in Internet Explorer - revisited
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/ie_leak_patterns.aspMSDN: Understanding and Solving Internet Explorer Leak Patterns
Drip IE Leak Detector
An jedes neue DOM Element kommt auch ein Eventhandler dran.
Wie der erfahrene Entwickler weiß, entstehen dadurch Memory Leaks im IE.
Nicht unbedingt, AFAIK.
"Zirkulaere Referenzen", also JavaScript-Objekte, die Referenzen auf DOM-Objekte enthalten, die wiederum auf das JavaScript-Objekt verweisen - das leakt.
Macht es außerdem noch einen Unterschied, ob ich den table noch ins DOM einhängen muss? Also in bestehendes DOM. Hab mal gelesen, dass man z.B. keine Kindelement an Elemente anhängen soll, die "noch in der Luft hängen", die also selbst kein elternelement haben. Was ist da dran?
Aktuell k.A. - aber das Argument war hier erst letzte Tage noch irgendwo zu lesen.
MfG ChrisB
Hallo Christian,
Macht es außerdem noch einen Unterschied, ob ich den table noch ins DOM einhängen muss? Also in bestehendes DOM. Hab mal gelesen, dass man z.B. keine Kindelement an Elemente anhängen soll, die "noch in der Luft hängen", die also selbst kein elternelement haben. Was ist da dran?
bei Tabellen und DIVs habe ich beide Varianten ausprobiert und keinen Unterschied bemerkt. Bei anderen Elementen, z.B. "input", hatte der IE Probleme, wenn Attribute geändert oder gesetzt wurden, bevor das Element ins DOM eingehängt war.
Gruß, Jürgen