【问题标题】:HTML5 audio and garbage collectionHTML5 音频和垃圾收集
【发布时间】:2017-03-10 02:24:45
【问题描述】:

我正在创建一个使用 HTML5 音频的游戏。某些声音可能会同时播放不止一次(复音),因此我没有使用原始的 <audio> 元素,而是将它们的引用保存在一个对象中,然后像这样播放它们:

playSound(id) {
  this.sounds[id].cloneNode().play();
}

我的问题是克隆的节点会被自动垃圾收集,还是我需要担心?至少在 Chrome 中声音会播放,所以在函数退出后不会立即删除节点,但是由于节点没有插入 DOM 并且我没有引用它,所以我无法检查它是否从内存中删除声音播放完毕后。

【问题讨论】:

  • 来自MDN的相关信息:“只要在播放过程中,使用 new Audio() 构造的 Audio 元素就不会被垃圾回收。它将继续播放并且在 pause() 之前一直可以听到被调用或播放结束。”
  • 已经好几年了,你有没有完成你的项目,看看有没有问题出现?

标签: javascript html garbage-collection


【解决方案1】:

根据这个来源,音频可以被垃圾收集,但它似乎暗示您可能需要在 JavaScript 中使用 new Audio() 构造函数来利用此功能,而不是引用 HTML 元素。

https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio#memory_usage_and_management

内存使用和管理

如果删除了对使用 Audio() 构造函数创建的音频元素的所有引用,则如果当前正在播放,则 JavaScript 运行时的垃圾收集机制不会将元素本身从内存中删除。相反,音频将继续播放,并且对象将保留在内存中,直到播放结束或暂停(例如通过调用 pause())。届时,该对象将成为垃圾回收的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多