← 返回题目列表

fetchpriority 有什么用?资源优先级如何影响页面性能?

中等 第 24 / 29 题 更新于 2026/07/29
前端性能资源优先级fetchpriority加载优化

简化版

fetchpriority 用来提示浏览器某个资源的下载优先级,例如首屏大图可以设置 fetchpriority=\"high\",非关键图片可以设为 low。它影响资源调度,但不是强制命令。优化资源优先级要先识别关键资源,避免让不重要资源抢占带宽,也不要把所有资源都设成 high。

详细版

浏览器会根据资源类型、位置、是否阻塞渲染等因素安排请求优先级。开发者可以通过 preloadasync/defer、懒加载和 fetchpriority 提供额外提示。

手段作用示例
fetchpriority调整已有资源优先级首屏 LCP 图片
preload提前发现关键资源字体、关键 CSS、首屏图
loading=\"lazy\"降低屏幕外图片优先级长页面图片
defer延迟脚本执行到解析后非阻塞业务 JS
<img
  src="/hero.webp"
  width="1200"
  height="600"
  fetchpriority="high"
  alt="活动主视觉"
/>

优先级优化的目标不是让所有资源更快,而是让关键资源先快起来。

完整版教学

一、资源优先级为什么重要

浏览器同时能发起多个请求,但网络带宽、连接数和服务器处理能力都有限。如果非关键资源太早占用带宽,关键资源就会排队。

首屏性能尤其依赖关键资源顺序。LCP 图片、关键 CSS、核心字体和入口 JS 如果被延后,用户会明显感觉页面慢。

二、fetchpriority 解决什么问题

有些资源浏览器能发现,但默认优先级不一定符合业务。典型例子是首屏大图:浏览器看到 <img> 后才请求,而且可能优先级不够高。

fetchpriority="high" 可以告诉浏览器这张图很重要,应提高下载优先级。

<img src="/banner.avif" fetchpriority="high" width="960" height="480" alt="banner" />

三、它和 preload 的区别

preload 是“提前发现资源”,fetchpriority 是“调整资源优先级”。两者可以配合,但不能滥用。

对比preloadfetchpriority
重点让浏览器早点知道资源影响请求调度优先级
常见对象字体、CSS、LCP 图图片、script、fetch
风险预加载无用资源浪费带宽high 太多导致优先级失效

四、哪些资源适合 high

适合提高优先级的资源通常满足:

  • 首屏可见。
  • 影响 LCP 或主要内容呈现。
  • 资源体积较大,晚开始会拖慢体验。
  • 不会被 CSS 背景图或 JS 动态插入延迟发现。

屏幕外图片、非关键广告、推荐位、埋点脚本不应该抢高优先级。

五、如何观察优先级

Chrome DevTools Network 面板可以显示 Priority。也可以结合 Performance 面板看关键资源在瀑布图中的开始时间和完成时间。

如果 LCP 图片开始请求很晚,就要分析它是被发现晚、优先级低,还是被其他资源抢占。

六、优先级只是提示

浏览器最终会综合自身策略、网络状态和资源类型决定调度。fetchpriority 不是强制命令,也不是所有浏览器和所有资源类型都表现完全一致。

所以优化后要用 Lab 和 RUM 验证,不要只看代码写了属性。

七、常见误区与追问

  • 误区:所有首屏资源都应该设 high。 high 太多会互相竞争,关键资源反而没有真正突出。
  • 误区:fetchpriority 可以替代 preload。 一个管优先级,一个管提前发现,解决的问题不同。
  • 误区:加了 high LCP 一定下降。 如果瓶颈在 TTFB、图片体积或主线程渲染,优先级提示收益有限。
  • 追问:首屏背景图怎么办? CSS 背景图发现较晚,可以考虑 preload 对应图片资源。
  • 追问:非首屏图片怎么处理? 通常使用 loading=\"lazy\" 并避免设置高优先级。
  • 追问:怎么证明它有效? 看 Network 瀑布图、LCP 元素加载时间和线上 LCP 分位数变化。

八、加强记忆

资源优先级记成“关键资源别排队”。preload 负责早发现,fetchpriority 负责调度提示,懒加载负责降低非关键资源优先级。优化只给真正关键资源开绿灯。