我正在制作一款使用HTML5音频的游戏。某些声音可能会同时播放多次(复音),因此我不会使用原始的<audio>
元素,而是在对象中保留对它们的引用,然后像这样播放它们:
playSound(id) {
this.sounds[id].cloneNode().play();
}
我的问题是克隆节点会自动被垃圾收集,还是我需要担心它?至少在Chrome中声音将会播放,因此在函数退出后不会立即删除节点,但由于节点未插入DOM而我没有引用它,我无法检查它是否已从内存中删除一旦声音播放完毕。
答案 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())。届时,该对象将成为垃圾回收的对象。