我正在创建一个使用HTML5音频的游戏。某些声音可能会同时播放多次(复调),所以我不使用原始的<audio>元素,而是在对象中保留对它们的引用,然后像这样播放它们:
playSound(id) {
this.sounds[id].cloneNode().play();
}我的问题是,克隆的节点是否会被自动垃圾收集,或者我是否需要担心它?至少在Chrome中,声音可以播放完,所以在函数退出后,节点不会立即删除,但由于节点没有插入到DOM中,我也没有引用它,所以一旦声音播放完毕,我就不能检查它是否从内存中删除。
发布于 2021-06-30 10:52:29
根据这个来源,音频可以被垃圾收集,但这似乎意味着你可能需要使用JavaScript中的new Audio()构造函数来利用这个特性,而不是引用到HTML元素。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio#memory_usage_and_management
内存使用和管理
如果对使用Audio()构造函数创建的音频元素的所有引用都被删除,那么如果当前正在回放,则JavaScript运行时的垃圾收集机制不会从内存中删除该元素本身。相反,音频将继续播放,对象将保留在内存中,直到播放结束或暂停(例如通过调用pause())。此时,该对象将成为垃圾回收的对象。
https://stackoverflow.com/questions/40283976
复制相似问题