Soundcloud iFrame嵌入泄漏记忆

时间:2012-07-29 22:44:10

标签: iframe memory-leaks embed soundcloud

我目前正在构建一个单页骨干应用,在一个页面上嵌入多达10个独立的Soundcloud iFrame。然后,用户可以查看其他页面,每个页面都包含自己的一组iFrame。

我注意到每次加载一组新的iframe时,该标签的内存消耗大约增加80-100MB(根据Chrome任务管理器)。这个内存永远不会被放弃,因此只需点击几下,标签就会轻松达到300MB并变得无法忍受。这种缓慢发生在Chrome 20和Firefox 13中。

每次页面更改后,我都尝试.remove()'所有iframe以及通过.html('')清除容器元素,并且都不会阻止内存增长。

本要点中提供的样本代码具有与上述相同的行为。在每次加载时,单个iFrame消耗大约10MB的额外内存。 https://gist.github.com/3202151

Soundcloud是否嵌入代码来维护iframe的句柄并防止它被GC化?有没有其他方法可以从DOM中删除元素以避免内存膨胀?

注意:我无法将所有曲目添加到可以加载一次的单个集合,因为嵌入的曲目不是我自己的。

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题。我正在使用SoundCloud js sdk在我网站上的自定义播放器中传输音频。我让它运行并让它彻夜不眠(因为我怀疑swf大小)。果然,早上瑞士法郎很大,我的电脑显然很慢。 SoundCloud sdk使用SoundManager2来播放/播放音频,因此它会创建一个可以在JS中访问的soundManager对象。我最后通过调用

来管理swf大小
soundManager.reboot();

...播放的每首歌曲之间。在您的情况下,您可以在各个页面之间调用它,一次将内存保持在最大80-100MB。它将加载时间增加了几分之一秒,但这对于解决不断增长的内存问题来说是一个很小的代价。

我不确定iframe播放器是否也会创建soundManager对象,但如果是这样,请尝试一下!

在此处查看SoundManager2文档:

http://www.schillmania.com/projects/soundmanager2/doc/#soundmanager-reboot