预加载视频时是否需设置video.src?及资源复用相关疑问
关于视频预加载代码的疑问解答
1. 设置objectURL是否有必要?
有必要,这是确保100%复用预加载资源的可靠方式:
- 仅用
fetch加载视频的话,后续相同URL的video请求不一定能复用内存里的预加载数据——fetch拿到的Blob是独立存在内存中的,和浏览器HTTP缓存是两套机制。除非请求头、缓存策略完全匹配,才可能触发HTTP缓存,但这个不确定性很高。 - 用
URL.createObjectURL(blob)生成本地URL,相当于让video直接引用已经下载到内存的Blob数据,完全不会发起新的网络请求,能确保直接复用预加载好的资源,这也是这段代码的核心设计目的。
2. 该video元素是否必须是要插入DOM的那个?
不需要。哪怕是完全脱离DOM的临时video元素,只要给它设置src为这个objectURL,浏览器就会自动完成Blob资源的加载和解析,和是否插入DOM没有关系。
3. 是否像预加载图片一样,设置任意Video对象的src即可?
对的,和图片预加载逻辑完全一致:
- 你可以创建一个不插入DOM的临时
video实例,设置其src为生成的objectURL,就能完成预加载操作。 - 后续不管是用这个临时video,还是新创建的video元素,只要使用同一个objectURL(或者基于同一个Blob生成新的objectURL),都能直接复用已加载的内存资源,无需重新下载。
提醒:使用完objectURL后,记得调用
URL.revokeObjectURL()释放内存,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Donald Zhu
相关产品推荐
相关产品推荐

