Entsorgen Sie ein Bildobjekt

7

Wenn Sie ein neues Image-Element in JavaScript erstellen, betrachtet das Google Chrome-Speichertool (Entwicklerwerkzeuge & gt; Timeline & gt; Arbeitsspeicher) es natürlich als neues DOM-Element.

In meinem Fall habe ich mehr als 1500 DOM-Elemente, und ich möchte sie loswerden. Ich habe versucht, alle Objekte in einem Array zu speichern und alle in einer Schleife zu löschen, wenn ich fertig bin, alle Objekte zu erstellen, was zu dem folgenden Fehler führt:

Uncaught TypeError: Cannot call method 'removeChild' of null

Das bedeutet, dass die Bildobjekte nicht im aktuellen DOM erscheinen.

%Vor%

Gibt es eine Möglichkeit, die Bildobjekte zu entfernen / zu löschen / zu löschen / zu entfernen?

    
Tim S. 14.06.2012, 11:21
quelle

5 Antworten

9

Das Setzen von images = null würde Ihre Referenz im Code zum Objekt entfernen. Um das Ereignis load zu implementieren, muss Chrome jedoch eine eigene interne Referenz auf das Objekt haben.

Das heißt, Sie könnten Code wie folgt haben:

%Vor%

Auf diese Weise würden Sie immer noch viele "Test" -Alarme erhalten, obwohl Sie keine Referenz auf diese Objekte haben.

Daher ist mein Tipp , dass es sich um einen Fehler in Chrome und nicht in Ihrem Code handelt.

Update: Wenn man sich die Art der Chromiumquelle anschaut, beweist das (ich meine den Kommentar zu den Zeilen 67-71 dieser Datei, insbesondere den FIXME-Hinweis Ссылка ):

%Vor%
    
naivists 14.06.2012, 11:42
quelle
6

Wenn Sie sie nicht zum DOM hinzufügen (wie zum Beispiel appendChild zu einem Elternteil verwenden), dann ist removeChild nutzlos. Die Bildobjekte sind nur im Speicher vorhanden.

Um Elemente im Speicher anzuordnen, müssen Sie nur Verweise auf diese Objekte entfernen (z. B. die referenzierende Variable auf null setzen), und die Garbage Collection erledigt den Rest. Wenn Sie sie nicht alle vernichten können, werden sie nicht GC'ed.

    
Joseph 14.06.2012 11:25
quelle
2

AFAIK, das null zuweist, sollte es aufräumen: images[i] = null

    
KooiInc 14.06.2012 11:25
quelle
2

Um den von "Naivisten" von Chrom und specilly IE und EDGE beschriebenen Fehler loszuwerden. Sie können die Bildquelle in leer ändern, so dass kein Speicher mehr benötigt wird.

%Vor%     
HLS 10.06.2016 07:56
quelle
1

Ich denke, nur so geht es:

%Vor%     
ioseb 14.06.2012 11:25
quelle

Tags und Links