在网页开发中,资源加载的优化一直是提升用户体验的关键环节。 在没有 fetchpriority 之前,浏览器对资源的加载优先级有一定的预设规则,但这些规则可能不完全符合我们的优化需求。使用 fetchpriority,我们可以更精确地控制资源的加载顺序,从而优化页面的关键渲染路径(Critical Rendering Path),提升如最大内容绘制(Largest Contentful Paint, LCP)等性能指标。

什么是fetchpriority?

fetchpriority 是一个 HTML 属性,它可以被添加到任何加载资源的 HTML 元素上,如图片、脚本等。 通过这个属性,我们可以告诉浏览器哪些资源更加重要,应该优先加载。 fetchpriority 有三个可选值值:low、high 和默认的 auto。

  • low:降低资源的相对优先级。
  • high:提高资源的相对优先级。
  • auto:默认值,让浏览器决定优先级。

如何使用 fetchpriority 来提高资源加载权重呢?下面举个几个常见的场景。

提高图片加载权重

假设我们有一个图片轮播,其中包含了页面的主要内容。我们希望浏览器优先加载当前显示的图片,以提升 LCP 性能。

<!-- 当前显示的图片设置高优先级 -->
<img src="current-image.jpg" fetchpriority="high" />
<!-- 其他轮播图片设置低优先级 -->
<img src="other-image1.jpg" fetchpriority="low" />
<img src="other-image2.jpg" fetchpriority="low" />

优化延迟加载的图片

对于使用 loading="lazy" 属性的延迟加载图片,我们可以通过 fetchpriority 来优化它们的加载顺序。

<!-- 延迟加载的图片,优先加载主要内容图片 -->
<img src="main-content-image.jpg" loading="lazy" fetchpriority="high" />
<!-- 其他延迟加载的图片 -->
<img src="lazy-image1.jpg" loading="lazy" fetchpriority="low" />
<img src="lazy-image2.jpg" loading="lazy" fetchpriority="low" />

JS资源的加载优先级

对于 JS 资源,我们可以使用 fetchpriority 来调整它们的加载顺序,确保关键脚本首先被加载。

<!-- 重要的JavaScript脚本 -->
<script src="critical.js" fetchpriority="high"></script>
<!-- 较不重要的JavaScript脚本 -->
<script src="non-critical.js" fetchpriority="low"></script>

fetch请求优先级

可以使用 fetchpriority 来设置 fetch 请求的优先级。

// 高优先级的fetch请求,用于获取主要内容
fetch('https://api.example.com/content', { fetchpriority: 'high' })
  .then(response => response.json())
  .then(data => console.log('Main content:', data));
// 低优先级的fetch请求,用于获取评论
fetch('https://api.example.com/comments', { fetchpriority: 'low' })
  .then(response => response.json())
  .then(data => console.log('Comments:', data));

fetchpriority 为我们提供了一个强大的工具来优化资源加载,从而提升网页的性能和用户体验。虽然浏览器支持该属性,但是也要适当使用,不要滥用,过度使用反而会适得其反。