2

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

我注意到每次加载一组新的 iframe 时,选项卡的内存消耗都会增加大约 80-100MB(根据 Chrome 任务管理器)。这个内存永远不会被放弃,所以在点击几下之后,标签很容易达到 300MB 并且变得非常慢。这种缓慢出现在 Chrome 20 和 Firefox 13 中。

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

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

Soundcloud 嵌入代码是否在做一些事情来维护 iframe 的句柄并防止它被 GC 处理?有没有另一种方法可以从 DOM 中删除元素以避免内存膨胀?

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

4

1 回答 1

2

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

soundManager.reboot();

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

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

在此处查看 SoundManager2 文档:

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

于 2013-04-18T19:46:54.433 回答