1

我正在尝试通过每 100 毫秒替换一次图像的 src 来使用 Javascript 实现动画 PNG。它显示得很好,但我发现它在 Firefox 上运行时会逐渐消耗越来越多的内存。

这是我用来播放动画的循环,虽然我不认为它有什么特别之处——

self.next = function() {
    if(self.doPlay == true) {
        self.currentFrame++;
        if(self.currentFrame >= self.numFrames) {
            self.currentFrame = 0;
            self.doPlay = self.doLoop;
        }
    }
    if(self.doPlay == true) {
        image.src = self.frames[self.currentFrame].src;
        setTimeout( self.next, self.frameDelays[self.currentFrame]);
    }
}

(其中 frames 是一组预加载的 Image 对象)

如果我注释掉 src 中的更改,则内存使用情况很好。否则,内存使用量会无限上升,直到浏览器最终崩溃。

我尝试从 DOM 中删除和替换图像,而不是更改 src(在香草和 jQuery 中),但它似乎没有帮助。

有人知道更好的方法吗?

谢谢你的时间 :)

4

2 回答 2

2

你有没有想过只使用图像并在背景中更改滚动?真的很快,推荐

看看这个

http://willian.nerdti.com.br/botaoImagem.html

于 2012-05-15T04:40:41.987 回答
0

这不是对这个问题的回答,而是另一个评论(我不能离开,因为我的 StackOverflow 声誉目前不是 50)。无论如何,我注意到上面有人(在评论部分)说这是一个非常糟糕的主意。对于这种特殊情况,他可能是对的,但是这种内存泄漏在我们的应用程序中以一种完全出乎意料的方式引起了人们的注意(并导致我们完全放弃了 FireFox)。

基本上,我们的应用程序有一个左侧导航栏,其中包含我们组织中各种人员的小头像。这个左侧的导航栏可以被过滤、排序、更新等。这个栏(有时)可以包含数百个图像,并且随着这个栏的每次随机播放,FireFox 会丢失 500K 到 1MB 的剪辑,而 IE9/10、Chrome 和Safari不会丢失任何东西。

因此,在修复此错误之前,FireFox(用于我们的内部应用程序)不再是可行的选择。

于 2014-04-10T17:30:39.030 回答