【问题标题】:Soundcloud iFrame Embed Leaking MemorySoundcloud iFrame 嵌入内存泄漏
【发布时间】:2012-07-27 15:45:00
【问题描述】:

我目前正在构建一个单页面主干应用程序,该应用程序在单个页面上嵌入了多达 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 中删除元素以避免内存膨胀?

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

【问题讨论】:

  • 我对这件事很感兴趣,因为我也使用

标签: iframe memory-leaks embed soundcloud


【解决方案1】:

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

soundManager.reboot();

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

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

在此处查看 SoundManager2 文档:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多