<video> 和 <audio> 支持 lazy loading,视频和音频终于支持懒加载了

更新日期: 2026-04-22 阅读: 20 标签: 懒加载

2019年,图片标签就有了loading="lazy"。但视频和音频一直没有。

如果你的网页下方放了视频,用户还没看到,视频就已经开始下载了。白白浪费流量,还拖慢页面速度。要解决这个问题,以前只能自己写IntersectionObserver,代码量不小。

现在好了。视频和音频的原生懒加载已经成为标准。Chrome 148(2026年5月7日)会默认开启这个功能。Firefox和WebKit也在开发中,很快就能用上。

用法和图片一样,加一个属性就行。


基本用法

最简单的写法:

<video src="intro.webm" loading="lazy"></video>

浏览器会推迟下载视频,直到它快出现在屏幕上(或者被Tab面板、轮播图切换出来的时候)。

如果你想同时放一张封面图:

<video src="intro.webm" poster="cover.jpg" loading="lazy"></video>

建议顺手加上width和height(或者用aspect-ratio)。视频如果没有尺寸,加载前不占空间,页面布局会突然跳动。懒加载的视频因为加载更晚,这个跳动会更明显。


三个需要注意的地方

1. 封面图也会被延迟

这可能是最让人意外的。加了loading="lazy"以后,浏览器不光延迟视频,连poster指定的封面图也不下载了。

仔细想想也对:视频都还没出现,封面图确实也没必要提前加载。但有一种情况:视频放在折叠面板里,你想让用户先看到封面图,点击后再播放视频。这时候封面图也跟着延迟就不合适了。

如果你希望封面图立刻显示,视频延后加载,有两个办法:

<!-- 方法一:poster不用lazy,改用CSS背景图 -->
<div class="video-wrapper" style="background-image: url('cover.jpg')">
  <video src="intro.webm" loading="lazy"></video>
</div>

<!-- 方法二:用preload="none",不加lazy -->
<video src="intro.webm" poster="cover.jpg" preload="none"></video>

方法二少写了一个属性,但preload不等于lazy。它们的区别下面会讲到。

2. autoplay反而更好用了

以前,加了autoplay的视频在页面加载时就开始播放,不管它在不在屏幕上。一个放在页面底部的视频,用户还没滚到那里,就已经在后台播放了,浪费流量和CPU。

加了loading="lazy"以后,autoplay的行为被推迟了:视频要滚到屏幕附近才开始播放。这个行为写进了HTML规范。

<video
  src="background.webm"
  loading="lazy"
  autoplay
  muted
  playsinline
></video>

注意:muted和playsinline不是lazy的要求,是浏览器对autoplay本身的限制。大多数浏览器要求视频必须静音且内联播放才允许自动播放。不管有没有lazy,这两个属性都要带上。

3. preload加上lazy后行为有变化

preload本来就有点绕,加上loading="lazy"以后更绕了。

先回顾preload的三个值:

  • auto(默认):浏览器自己决定下载多少,有些浏览器会直接下载整个视频

  • metadata:只下载一点点元数据,够显示时长和第一帧

  • none:不下载任何视频数据

关键来了:当视频有loading="lazy"时,这些行为不会消失,而是被推迟到视频可见的时候才生效。也就是说,你设置preload="auto" + loading="lazy",浏览器不会在页面加载时就下载视频,但等视频滚到屏幕附近时,它还是会按auto的逻辑来下载。

还有一个细节:preload="none"和loading="lazy"可以一起用。效果是视频数据完全不预加载,而且整个加载行为推迟到可见。如果你只想让封面图先出来,视频完全不预载,这个组合比单独用preload="none"更省带宽。

另外preload这个属性在不同浏览器里的实现本来就不太一致。lazy不会修复这些问题,只是把它们推迟了。


audio的特殊要求

audio的懒加载比video简单,不用管封面图和画面尺寸。但有一个容易忽略的地方:audio必须有controls属性,懒加载才能生效。

<!-- 有效:懒加载会生效 -->
<audio src="podcast.mp3" loading="lazy" controls></audio>

<!-- 无效:懒加载不会生效 -->
<audio src="podcast.mp3" loading="lazy"></audio>

原因很简单:懒加载的触发条件是元素可见且和屏幕有交集。audio没有控件就不可见,不可见就不会触发。video没有这个问题,因为视频本身就有画面占位。

至于autoplay,audio比video更严格。浏览器通常会阻止音频自动播放,除非用户已经和页面有过互动,或者给了网站专门权限。lazy不会绕过这些限制,但一旦autoplay被允许,行为和video一样:等到元素可见了才开始播放。


首屏视频不要用懒加载

这和图片的懒加载是同一个坑:如果视频在页面加载时就已经在屏幕上,加loading="lazy"反而会拖慢加载。

正常情况下,浏览器解析HTML时就会开始拉取视频。但loading="lazy"要求浏览器先等页面布局完成,判断元素是否可见,然后才开始请求。这个等待布局的时间,放在首屏元素上就是白费功夫,可能会拖低LCP(Largest Contentful Paint)。

所以记住:只有不在首屏的视频才需要加lazy。


浏览器支持情况

截至2026年4月:

  • Chrome 148(5月7日发布)默认开启。147版可以通过命令行flag --enable-features=LazyLoadVideoAndAudio 提前体验

  • Firefox和WebKit:Squarespace贡献了代码,正在审核中。Firefox的补丁在Phabricator(D278547),WebKit的PR在GitHub(#58220),暂时还没合并

特性检测一行代码就够了:

'loading' in HTMLMediaElement.prototype; // 返回true表示支持

HTMLMediaElement是video和audio共同的基类,所以这一行同时覆盖了两者。

不支持的浏览器会直接忽略loading="lazy",不会报错,也不会影响正常播放。你可以放心用,不需要先做检测再决定要不要加。


最后

和手写IntersectionObserver相比,原生懒加载的优势就两个:不用写JS,autoplay的推迟行为是规范保证的。但手写方案能做更精细的控制(比如自定义触发距离、预加载策略),如果你的场景比较特殊,原生方案覆盖不了,手写IO还是可以继续用。

loading="lazy"对video和audio的支持,算是把2019年图片就有的能力补齐了。写法简单,降级安全,几个要注意的地方提前知道就行。等Firefox和WebKit都合并了,就可以彻底放心用了。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13682

相关推荐

v-lazy图片懒加载

安装插件npm install vue-lazyload --save;在main.js文件中注册插件。配置参数:preLoad提前加载高度(数字 1 表示 1 屏的高度)、error图片加载失败时显示的图片

监听滚动条,实现数据懒加载

当滚动条滚动到底部时,加载新数据;需要根据距离底部的位置加载数据,考虑到新数据进来会使滚动条距离底部的位置有所改变,避免重复加载数据

解决el-tree lazy懒加载时,连续勾选前两个子节点后第二次进入默认选中时,将父节点也勾选的问题

在用到el-tree的懒加载和默认勾选功能时,若第一次勾选前几个连续节点,第二次进入默认勾选时,由于el-tree子节点尚未完全加载(只加载出来前几个),默认勾选已经开始

vue懒加载

什么是懒加载?懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多

实现一个Vue自定义指令懒加载

当我们向下滚动的时候图片资源才被请求到,这也就是我们本次要实现的效果,进入页面的时候,只请求可视区域的图片资源这也就是懒加载。比如我们加载一个页面,这个页面很长很长,长到我们的浏览器可视区域装不下

前端性能优化之图片懒加载

在类电商类项目,往往存在大量的图片,如 banner 广告图,菜单导航图,美团等商家列表头图等。图片众多以及图片体积过大往往会影响页面加载速度,造成不良的用户体验,所以进行图片懒加载优化势在必行。

过度使用懒加载对 Web 性能的影响

如今为了提升应用性能,懒加载被广泛使用于 Web 应用中。它帮助开发者减少网站加载时间,节省流量以及提升用户体验。但懒加载的过度使用会给应用性能带来负面影响

vue路由懒加载的实现方式

在Vue项目开发中,随着功能不断增加,JavaScript文件会变得越来越大。这会导致页面首次加载时间变长,用户需要等待更久才能看到内容。路由懒加载就是解决这个问题的有效方法。

静态导入、动态导入和懒加载:彻底搞懂它们的区别

我在优化一个React项目时遇到了性能问题。首页加载特别慢,连点击按钮都要等好几秒才有反应。打开Chrome的网络面板一看,打包文件竟然有1MB多。这就像我要出门,却把家里所有东西都塞进了行李箱。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!