IE8不释放图像元素的内存

时间:2013-06-20 01:14:24

标签: javascript internet-explorer-8 garbage-collection

我有一个JavaScript小部件,可在图像帧之间切换以创建动作, 小部件在调用 render 方法时获取这些框架,并在调用 dispose 方法时放弃对它们的引用。

该实现通过使用PreloadJS(http://www.createjs.com/#!/PreloadJS/documentation)加载一组帧,然后将当前帧呈现为< canvas> ,或切换display:none并显示:阻止旧版浏览器上的图像元素。

IE8导致问题,因为它不希望在调用dispose方法时释放这些帧中的内存。 (注意:只有当图像在DOM中时才会发生,否则一切都会好的。)

完整的来源可以在这里找到:http://pastie.org/8061442

图像将添加到第201行的DOM中:

    var i = 0, img, node = self.$node[0];

    for ( ; i < self.imageSet.length; i += 1 ) {

        img = self.queue._loadedResults[self.imageSet[i]]

        img.setAttribute("draggable", "false")

        img.style.display = "none"

        node.appendChild(img)

        img = null
    }

    i = node = null

如果删除此代码(以及随附的处理代码on :251-259),则图像处理正确,只有在将元素添加到DOM时才会出现问题。

如果在dispose失败后调用render方法,则抛出经典的Stack verflow at line: 0错误。

任何想法/建议都会非常有帮助。请在建议之前查看代码,所有对图像的引用都已被置零,并且图像加载器的实例也已被处理,图像元素上没有事件监听器可以创建循环引用,等等。我可以看到图像应该被释放。

0 个答案:

没有答案