HTML5音频和垃圾收集

时间:2016-10-27 11:55:17

标签: javascript html5 garbage-collection

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

<块引用>

内存使用和管理

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