103 Early hints

Acelera los recursos críticos con 103 Early Hints

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2024-11-27

"103 early hints" en resumen

103 Early hints es una cabecera de servidor ligera y "no final" con el código de estado 103 y el nombre early hints. Esta cabecera es especial porque se envía antes de que se envíe la respuesta "real" del servidor. Tu navegador puede usar esta cabecera para obtener recursos críticos antes de que la página sea recibida y renderizada.

Las pruebas muestran que sin las 103 resource hints, una imagen LCP aparece un 45% más lenta en la pantalla. La mejora fue incluso mayor cuando la cabecera 103 también incluía hojas de estilo

Critical request chain example

¿Qué son las 103 - early hints?

Early hints es una cabecera HTTP que se envía antes de que el servidor web envíe la respuesta HTTP final. Las cabeceras HTTP permiten al cliente y al servidor pasar información adicional con una solicitud o respuesta HTTP.
Esta cabecera HTTP permite al servidor indicar al navegador del cliente, en una etapa temprana durante el proceso de carga, que ciertos recursos, como una imagen o una hoja de estilos, son "críticos" para el renderizado de la página.
Las early resource hints son una mejora sobre el retirado HTTP/2 server push, donde las resource hints se agrupaban con la respuesta final del servidor. La diferencia con el Server push es que las resource hints se pueden recibir mucho antes, para que el navegador también pueda comenzar a descargar antes.

¿Cómo usa un navegador las 103 - early hints?

Las early hints actualmente solo son compatibles con Google Chrome a partir de la versión 94. Debido a que early hints es todavía una función experimental, necesitarás iniciar Chrome con un llamado Chrome Browser Flag desde la línea de comandos. En mi caso, tengo que iniciar Chrome desde el terminal con el comando:

google-chrome --enable-features=EarlyHintsPreloadForNavigation

Las early hints no funcionan cuando:

  • Las early hints se envían desde una fuente distinta al recurso principal (el HTML)
  • Las Early Hints se envían desde un iframe
  • Las early hints se envían usando HTTP/1.1 o anterior
  • Las early hints contienen un dns-prefetch o prefetch hint

Las early hints solo funcionarán para resource hints de preload y preconnect cuando se envíen desde el documento principal a través de HTTP2 o HTTP/3. No está permitido enviar cabeceras de early hints desde, por ejemplo, una imagen o un iframe.

¿Cómo se ven las 103 early hints?

Después de implementar las 103 early hints, tan pronto como un navegador solicita una página web, se devuelve inmediatamente una cabecera 103 early hints. Por ejemplo, esta cabecera indica que image.webp y style.css deben precargarse.

HTTP/1.1 103 Early Hints
Link: </image.webp>; rel=preload; as=image
Link: </style.css>; rel=preload; as=style

Mientras tanto, el servidor puede comenzar a generar la respuesta HTTP "real". Para páginas dinámicas, esto puede tomar un poco de tiempo. Una vez que el servidor está listo para enviarla, se envía la respuesta final.

HTTP/1.1 200 OK
Date: Thurs, 16 Sept 2021 11:30:00 GMT
Content-Length: 1234
[the rest of the response]

Enviar 103 early hints

En términos de PageSpeed, el enfoque más rápido para enviar 103 early hints es a través de tu propio servidor. Usa esta guía para configurar 103 early hints tú mismo en el servidor web Apache o a través del módulo experimental de NGINX. Habilitar 103 early hints no es fácil de hacer y las early hints aún no se integran bien con CMSs populares como WordPress.

Por eso, la forma más fácil ahora mismo es activar las early hints a través de Cloudflare. Regístrate para early hints. Una vez que seas admitido, navega a 'Speed' -> 'Optimization' y activa Early Hints

Cloudflare aceptará las cabeceras de resource hint y las traducirá en una cabecera 103 early resource. Puedes enviar simplemente un early hint enviando una cabecera preload o preconnect. Cloudflare entonces lo traduce en una cabecera 103 early hint.
Con PHP y Cloudflare, las 103 early hints se pueden enviar con este código:

header("Link: </image.webp>; rel=preload; as=image", false);
header("Link: </style.css>; rel=preload; as=style", false);

Resultados de Lighthouse para 103 early hints

La pregunta más importante es, por supuesto: "¿Qué significan las 103 early resource hints para mis Core Web Vitals?" He probado 2 escenarios comunes.

1. Early resource hint en el elemento LCP

Inmediatamente después de la primera prueba, noté lo efectivas que pueden ser las early hints. El elemento LCP (una imagen) apareció en la pantalla un 35% antes que sin la cabecera 103 early hints presente.

HTTP/1.1 103 Early Hints
Link: </image.webp>; rel=preload; as=image
Solo precarga
103 Early hints

2. Early resource hint con una hoja de estilos grande y el elemento LCP

Para la segunda prueba añadí un archivo CSS de 85kb a la página. La diferencia en los resultados de Core Web Vitals es aún más notable. El First Contentful Paint (FCP) mejoró de 1.8 segundos a 1.4 segundos y el Largest Contentful Paint (LCP) mejoró de 3.2 segundos a solo 2 segundos.

HTTP/1.1 103 Early Hints
Link: </image.webp>; rel=preload; as=image
Link: </style.css>; rel=preload; as=style

Solo precarga
103 Early hints

CrUX data is 28 days late.

Google provides data 28 days late. CoreDash provides data in real-time. Debug faster.

Get Real-Time Data >>

  • Real-Time Insights
  • Faster Debugging
  • Instant Feedback
103 Early hints Core Web Vitals 103 Early hints