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?
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%
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.
Tags und Links javascript image