iframe - Soundcloud iFrame 嵌入内存泄漏

标签 iframe memory-leaks embed soundcloud

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

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

最佳答案

我也遇到过类似的问题。我正在使用 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

关于iframe - Soundcloud iFrame 嵌入内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11713626/

相关文章:

javascript - 有人可以向我解释这个 javascript 内存泄漏场景吗

android - Activity 泄漏了最初添加到此处的窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@46368a28

c++ - CPP 线程中的嵌入式 Ruby 崩溃

javascript - 如果 iframe 在 src 中有非 html 文档(pdf 或文本),则 iframe 中的 onload 不起作用

javascript - Cordova 应用程序 (iOS) 中的 iframe history.back() 问题

javascript - 加载 iframe 后重新加载 iframe

ajax - 是否可以取消使用隐藏iframe的文件上传?

c - valgrind 错误 : invalid read

flash - <object> 标签中的 classid 有什么作用?

sql - 在sql中存储嵌入代码后,YouTube视频无法在Firefox中播放