web性能优化之——AI总结视频并不只看表面做法,关键还要理解相关条件、限制和后续影响。
很多人以为 .mp4 或 .webm 就是视频的全部,但实际上它们只是“包装盒”(Container,容器)。

因为不同的编解码器,压缩效率天差地别。
文档中提到了 FFmpeg 这个大名鼎鼎的音视频处理工具:
Bash
# 基础转换:将 input.mov 转为 webm 容器(默认使用 VP9/VP8 编码)ffmpeg -iinput.mov output.webm# 极致优化:去掉音频轨(-an 表示 audionone)ffmpeg -iinput.mov -an output.webm核心痛点: 很多设计师导出的“静音 GIF 替代视频”里,其实还残留着一条“无声的音频轨”。虽然没声音,但它依然占用字节。用
-an彻底拔掉音频轨,可以瞬间压榨出几百 KB 的空间。
由于不是所有浏览器都支持最新的 AV1 或 VP9,我们在写 HTML 时必须做“降级处理”:
HTML
<video controls> <source src="video-av1.webm"type="video/webm; codecs=av1"> <source src="video-vp9.webm"type="video/webm; codecs=vp9"> <source src="video-h264.mp4"type="video/mp4"> 您的浏览器不支持 HTML5 视频播放。</video>致命陷阱(注意顺序): 浏览器解析
<source>是从上往下的,一旦发现自己能播放某一个,就会立刻下载,不再看后面的。如果你把mp4放在第一行,那么所有支持现代格式的先进浏览器,也都会被迫下载体积臃肿的mp4。
poster 属性用来指定视频还没播放时显示的封面图。
HTML
<video poster="cover.jpg"> <source src="video.webm" type="video/webm"></video>LCP(Largest Contentful Paint,最大内容绘制) 是衡量网页加载速度的重要指标(网页上最大的那块内容什么时候显示出来)。
poster,浏览器会把视频的第一帧画面算作 LCP 的考核对象。这意味着,如果你的视频没有封面,且加载很慢,网页的 LCP 得分就会非常难看。
正确做法: 务必提供一张经过极致压缩的 poster.jpg(比如转换为 WebP 或 AVIF 格式)。
进阶技巧: 如果这个视频在首屏(一打开就能看到),甚至可以在 <head> 中预加载这张封面图:
HTML
<link rel="preload" as="image" href="cover.jpg" fetchpriority="high">这是前端性能优化性价比最高的一招:用 <video> 彻底干掉动画 GIF。
一张几秒钟的高清 GIF 动图可能高达 10MB,而同样画质的视频(WebM 格式)可能只需要 500KB。
要想让视频像 GIF 一样无缝循环播放,必须组合使用以下属性:
HTML
<video autoplay muted loop playsinline> <source src="video.webm"type="video/webm"></video>autoplay: 自动播放。muted: 必须静音!现代浏览器为了防止网页突然发出声音吓到用户,严格限制非静音视频的自动播放。不加 muted,视频大概率会被浏览器拦截并静止。loop: 循环播放。playsinline: 在 iOS 等移动端浏览器上,防止视频自动进入全屏播放,而是乖乖地在网页原本的位置播放。文档中提到了控制视频下载的三种段位:
如果视频需要用户手动点击播放(不是自动播放),别让浏览器一进网页就下载它:
preload="none":告诉浏览器:“用户不点,你一个字节都别下载。”preload="metadata":只下载视频的时长、尺寸等基本信息,不下载视频主体。这是近几年浏览器刚支持的特性。给视频加上 loading="lazy",浏览器会把视频的封面图(poster)和元数据的下载,一直推迟到用户把网页滚动到视频附近时才开始加载。
像 YouTube 或 Bilibili 的嵌入视频(iframe),里面带有几百 KB 甚至上 MB 的第三方 JavaScript 脚本。如果一开局就加载,会严重霸占浏览器的主线程,导致用户点击网页时毫无反应(破坏了 INP 指标,即与下次交互的延迟)。
破解之道(外观模式):
<iframe> 或播放器。