Web 功能:
提取优先级
浏览器会根据脚本在文档中的位置以及是否具有 async 或 defer 等属性,为脚本分配默认优先级。使用 fetchpriority,开发者可以明确控制,确保关键脚本优先加载,而让非必要脚本不影响加载。
如何实现
- 确定关键脚本:确定哪些脚本对网页的核心功能或初始用户互动至关重要。
- 提升关键异步脚本的优先级:对于使用
async或defer加载的关键脚本,请添加fetchpriority="high"属性,以确保在发现阶段优先加载这些脚本。 - 降低非必要脚本的优先级:对于不需要立即执行的脚本(例如分析、广告或首屏下方的微件),请添加
fetchpriority="low"并确保它们具有async、defer或module属性,以避免阻塞。 - 按顺序加载会阻塞解析器的脚本:在正文末尾对会阻塞解析器的脚本使用
fetchpriority="low",以防止它们与更关键的资源争夺带宽。
示例代码
<!-- Elevate the priority of the critical app logic -->
<script src="/js/app.js" async fetchpriority="high"></script>
<!-- Deprioritize non-essential tracking scripts -->
<script src="/js/tracker.js" async fetchpriority="low"></script>
<!-- Deprioritize late-body scripts to favor critical images or CSS -->
<script src="/js/legacy-widgets.js" fetchpriority="low"></script>
最佳做法
- 强制性要求:最多只能在 1-2 个关键脚本上使用
fetchpriority="high",以避免网络争用和优先级提升效果被稀释。 - 务必专门针对已知对 Interaction to Next Paint (INP) 至关重要的
async脚本使用fetchpriority="high"。 - 务必使用
fetchpriority="low"降低初始用户体验不需要的脚本的优先级。 - 请勿在每个脚本标记上都使用
fetchpriority;只有在已知浏览器的默认启发法不是最佳时,才应使用它来更改默认启发法。 - 请勿使用已弃用的
importance属性。它已被fetchpriority取代。
后备策略
fetchpriority 属性是一种渐进增强。不支持该属性的浏览器会忽略该属性,并使用其内部调度逻辑,而不会出错。对于基本用法,不需要显式特征检测或回退逻辑。