Los navegadores asignan prioridades predeterminadas a las secuencias de comandos según dónde aparecen en el documento y si tienen atributos como async o defer. El uso de fetchpriority les brinda a los desarrolladores un control explícito para garantizar que las secuencias de comandos críticas se carguen primero, mientras que las no esenciales se mantienen fuera del camino.
Cómo implementarlo
- Identifica las secuencias de comandos fundamentales: Determina qué secuencias de comandos son esenciales para la funcionalidad principal de la página o la interacción inicial del usuario.
- Eleva las secuencias de comandos asíncronas críticas: Para las secuencias de comandos críticas cargadas con
asyncodefer, agrega el atributofetchpriority="high"para asegurarte de que se prioricen durante la fase de descubrimiento. - Quita la prioridad de las secuencias de comandos no esenciales: Para las secuencias de comandos que no se necesitan de inmediato (p.ej., estadísticas, anuncios o widgets en la mitad inferior de la página), agrega
fetchpriority="low"y asegúrate de que tengan un atributoasync,deferomodulepara evitar el bloqueo. - Secuencia de comandos que bloquean el analizador: Usa
fetchpriority="low"en las secuencias de comandos que bloquean el analizador al final del cuerpo para evitar que compitan por el ancho de banda con recursos más críticos.
Ejemplo de código
<!-- 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>
Prácticas recomendadas
- OBLIGATORIO: Solo usa
fetchpriority="high"en 1 o 2 secuencias de comandos críticas como máximo para evitar la contención de la red y diluir el aumento de prioridad. - SÍ uses
fetchpriority="high"específicamente para las secuencias de comandosasyncque se sabe que son fundamentales para Interaction to Next Paint (INP). - SÍ quita la prioridad de las secuencias de comandos que no son necesarias para la experiencia inicial del usuario con
fetchpriority="low". - NO uses
fetchpriorityen todas las etiquetas de secuencia de comandos. Solo se debe usar para cambiar la heurística predeterminada del navegador cuando se sabe que no es óptima. - NO uses el atributo
importanceobsoleto. Se reemplazó porfetchpriority.
Estrategia de resguardo
El atributo fetchpriority es una mejora progresiva. Los navegadores que no lo admitan ignorarán el atributo y usarán su lógica de programación interna sin errores. No se requiere una detección de funciones explícita ni una lógica de resguardo para el uso básico.