【问题标题】:Does removing html5 media elements also remove memory used by the video/audio?删除 html5 媒体元素是否也会删除视频/音频使用的内存?
【发布时间】:2014-04-26 21:47:49
【问题描述】:

删除 html5 媒体 DOM 元素(视频或音频)是否也会释放由该元素表示的媒体使用的任何内存? (假设代码中也没有引用)

【问题讨论】:

  • 我知道对于像这样解释代码和 DOM 引用关系的问题有很多答案。我对新的 html5 元素特别感兴趣,因为它们似乎处于部分完成状态

标签: javascript html memory-management html5-video html5-audio


【解决方案1】:

来自规范:

4.8.10.16 作者使用媒体元素的最佳做法

在小型设备(例如机顶盒或手机)上播放音频和视频资源通常会受到设备中有限的硬件资源的限制。例如,一个设备可能只支持三个同步视频。出于这个原因,在媒体元素播放完毕后释放资源是一种很好的做法,方法是非常小心删除对元素的所有引用并允许它进行垃圾回收,或者更好的是,删除元素的 src 属性和任何源元素后代,并调用元素的 load() 方法强>。

同样,当播放速率不完全是 1.0 时,硬件、软件或格式限制可能会导致视频帧丢失和音频断断续续或静音。

来源:http://dev.w3.org/html5/spec-author-view/video.html#media-resource

【讨论】:

    【解决方案2】:

    当一个对象不再被引用时,它就会被垃圾回收。
    如果从 DOM 中删除元素,如果没有变量指向它,它会从内存中清除。

    在这个例子中,变量“img”仍然保存着对象。因此,当我们从 DOM 中删除它时,它不会从内存中清除。

    img.parentNode.removeChild(img);
    

    我们可以再次将其附加到 DOM。

    document.body.appendChild(img);
    

    http://jsfiddle.net/rgH2A/

    上述有关MEMORY。是否从 CACHE 中清除文件在任何情况下都由浏览器决定。

    【讨论】:

    • 似乎有一种特殊情况,视频/音频元素未附加到页面并且没有引用,但它仍然在播放。 jsbin.com/mafigifi/1/edit 所以你至少必须删除所有引用并暂停它。
    • @brianchirls,同意。这是内存泄漏。元素被创建,然后它在 DOM 周围浮动,不可能移除或控制它。应该避免编写这样的代码。
    • 感谢您的回答。在我的问题中,当我说任何记忆时,我是明确的。我并不是要争论缓存是否与内存相同,但我确实指的是创建标签所使用的任何内存使用情况。也许我可以编辑问题以澄清这一点?我愿意接受建议。我认为了解视频或音频文件是否会在其 DOM 表示消失后仍然存在这一点很重要,而且很难找到相关信息。
    • 缓存存储在磁盘上,通常称为存储,而不是内存。我想我已经回答了这两个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多