Entsorgen Sie ein Bild-Objekt
Beim erstellen eines neuen Bild-Elements in javascript, Google Chrome-memory-tool (Developer tools > Timeline > Speicher -) betrachtet es als ein neues DOM-element, natürlich.
In meinem Fall, ich bin am Ende mit 1500+ DOM-Elemente, und ich möchte Sie loswerden. Ich habe versucht, zu retten alle Objekte in einem array und löschen Sie alle von Ihnen in einer Schleife, wenn ich bereit bin, das erstellen aller Objekte, was die folgende Fehlermeldung:
Uncaught TypeError: Cannot call method 'removeChild' of null
Zeigt, dass die Bild-Objekten erscheint nicht in den eigentlichen DOM.
var images = [];
var i, image;
for( i = 0; i < urls.length; i++ ) {
image = new Image();
image.src = urls[i];
}
//other stuff happens
for( i = 0; i < images.length; i++ ) {
//apparently this doesn't work because I'm not adding the image to my DOM
//images[i].parentNode.removeChild( images[i] );
//delete images
}
Gibt es eine Möglichkeit zu entfernen/löschen/unset/entsorgen Sie die Bild-Objekte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einstellung
images = null
entfernen würde, Ihre Verweise im code auf das Objekt. Allerdings, die Umsetzung seinerload
Ereignis, Chrome hat eine eigene interne Referenz auf das Objekt.Ist, könnten Sie code wie diesen:
Diese Weise würden Sie immer noch eine Menge "Test" informiert, auch wenn Sie nicht über eine Referenz auf diese Objekte.
Daher mein denke ist, dass es ein bug in Chrome, nicht im code.
Update: der Blick durch die Chrom-source-Art beweist, dass (ich meine den Kommentar, auf den Linien 67-71 dieser Datei, insbesondere die FIXME Hinweis http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/bindings/v8/custom/V8HTMLImageElementConstructor.cpp ):
Wenn Sie nicht indem Sie Sie auf das DOM (wie mit
appendChild
zu einem Elternteil), dannremoveChild
ist nutzlos. Die Bildobjekte sind nur in der Erinnerung.Anderweitig darüber zu verfügen und Elemente in den Speicher, müssen Sie nur entfernen Sie Verweise auf diese Objekte (wie die referenzierende variable auf null), und die garbage collection erledigen den rest. Wenn Sie nicht null-Sie alle, die Sie nicht GC ' ed.
image
nach GC würde?AFAIK zuweisen
null
sollte es sauber:images[i] = null
Um loszuwerden, die Fehler beschrieben, die von "naivists" von chrome und specilly IE und EDGE.
Sie können ändern Sie die Bild-source zu leeren, so ist es zero memory.
Ich denke die einzige Möglichkeit ist, dies zu tun: