我目前正在编写一个使用HTML5 Audio API的应用程序。在Chrome,IE和Firefox中,我注意到我可以创建一个Javascript音频对象,将其设置为播放声音文件,然后将其设置为未定义,声音仍将播放,如下例所示:
var a = new Audio;
a.src = 'longAudioFile.mp3';
a.play();
a = undefined;
当我以类似的方式处理许多Audio对象时,如果我将一个设置为未定义,或者浏览器在完成播放/设置为暂停时清理它会导致内存泄漏吗?
答案 0 :(得分:1)
根据规范:
媒体元素不能因为删除了对它们的所有引用而停止播放;只有当媒体元素处于该元素不能播放其他音频的状态时,该元素才能被垃圾收集。
有一个没有显式引用的元素可能会播放音频,即使这样的元素仍然没有正在播放:例如,它可能有一个当前的媒体控制器仍然有引用但仍然可以取消暂停,或者它可能会被取消暂停,但会等待内容缓冲。
还有清理说明:
< ...>在完成播放时释放媒体元素所持有的资源,要么非常小心地删除对元素的所有引用并允许它被垃圾收集,要么更好地删除元素{{1} }属性和任何
src
元素后代,并调用元素的source
方法。
答案 1 :(得分:0)
据我所知,浏览器会在播放完毕后进行清理。