如果在没有将其附加到页面的情况下播放,使用 document.createElement 创建的视频元素何时会被垃圾收集?

Tom*_*Tom 5 javascript dom garbage-collection html5-video

假设我创建了一个视频并像这样播放:

async function createVideo() {
    const videoEl = document.createElement("video");
    videoEl.autoplay = true;
    videoEl.src = "https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4";

    await videoEl.play()
    return videoEl
}

createVideo()
    .then(() => console.log('video is playing'))
    .catch(error => console.log(error))
Run Code Online (Sandbox Code Playgroud)

在 chrome 上,这会导致视频播放,除非元素实际存在于 DOM 中。

该视频将在什么时候被垃圾收集?

此外,如果在返回视频元素之前createVideo()运行video.pause()在内部,垃圾收集将如何工作?视频元素会永远像僵尸一样存在吗?

Tom*_*Tom 6

这似乎在规范中得到了回答:https://dev.w3.org/html5/pf-summary/video.html

不在文档中时可能正在播放的媒体元素不得播放任何视频,但应播放任何音频组件。媒体元素不得仅仅因为对它们的所有引用已被删除而停止播放;仅当不存在引用的媒体元素达到该元素不再需要播放任何音频的点时(例如,因为该元素已暂停,或者因为已到达剪辑的末尾,或者因为其playbackRate 为 0.0) ) 元素可能会被垃圾收集。