Javascript 处理图像对象
在javascript中创建新的图像元素时,Google Chrome的内存工具(开发者工具>时间线>内存)自然会将其视为一个新的DOM元素 在我的例子中,我得到了1500多个DOM元素,我希望去掉它们。我尝试将所有对象保存在数组中,并在准备创建所有对象时在循环中删除所有对象,导致以下错误:Javascript 处理图像对象,javascript,image,Javascript,Image,在javascript中创建新的图像元素时,Google Chrome的内存工具(开发者工具>时间线>内存)自然会将其视为一个新的DOM元素 在我的例子中,我得到了1500多个DOM元素,我希望去掉它们。我尝试将所有对象保存在数组中,并在准备创建所有对象时在循环中删除所有对象,导致以下错误: uncaughttypeerror:无法调用null的方法“removeChild” 表示图像对象未出现在实际DOM中 var images = []; var i, image; for( i = 0;
uncaughttypeerror:无法调用null的方法“removeChild”
表示图像对象未出现在实际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
}
var-images=[];
varⅠ,图像;
对于(i=0;i
是否有方法移除/删除/取消设置/处置图像对象?如果不将它们添加到DOM中(如使用
将子对象添加到父对象),则移除子对象
是无用的。图像对象仅在内存中
要处理内存中的项,只需删除对这些对象的引用(如将引用变量设置为null),其余的工作将由垃圾收集完成。如果不能将它们全部空值,它们将不会被GC’ed。我认为唯一的方法是这样做:
for( i = 0; i < images.length; i++ )
images[i] = null;
}
// or just
images = null;
for(i=0;i
AFAIK,分配null
应该会清除它:images[i]=null
设置images=null
将删除代码中对对象的引用。然而,为了实现其load
事件,Chrome必须有自己的对象内部引用
也就是说,您可以编写如下代码:
for( i = 0; i < urls.length; i++ ) {
image = new Image();
image.src = urls[i];
image.onload = function(){alert('Test');};
image = null;
}
为了摆脱“naivists”对chrome和specilly IE和EDGE的描述。
您可以将图像源更改为空,使其占用零内存
image.src = '';
image = null;
谢谢我知道你的答案是最后一个,但你确实做了一些研究。这是修复了还是仍然是一个bug?它不是bug!您添加了一个侦听器,但没有删除它。通过执行“image=null”,您只是删除了这个具体的引用。对象仍然存在于内存中,尽管没有对它的引用。要让GS释放它,您必须通过“image.onload=null”删除该事件@shal绝对正确。不是虫子!你只需要在自己完全清理干净后,让垃圾收集器完成它的工作!有时说起来容易做起来难!)好奇的是,如果你将对象设为空,那么在GC'd之后,从技术上来说,它是否仍然会删除从图像
中分配的内存?
image.src = '';
image = null;