Optimizar el LCP Resource Load Delay

Del retraso a la visualización: aprende cómo mejorar la parte de resource load delay del Largest Contentful Paint

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-03-03

Esta guía forma parte del hub de Largest Contentful Paint (LCP). El Resource Load Delay es frecuentemente el mayor contribuidor individual a una mala puntuación de LCP. La mayoría de los equipos se centran en comprimir imágenes cuando el verdadero problema es que el navegador encontró la imagen demasiado tarde.

Optimizar el LCP Resource Load Delay

El Largest Contentful Paint (LCP) se compone de cuatro fases: TTFB, Resource Load Delay, Resource Load Duration y Element Render Delay. Los esfuerzos de desarrollo a menudo se centran en reducir el Load Duration mediante compresión de archivos, pero esto pasa por alto el Resource Load Delay, que frecuentemente es una fuente mayor de latencia. Este retraso antes de que comience la descarga puede añadir cientos de milisegundos a tu LCP, haciendo que supere el umbral de 2,5 segundos para una puntuación 'Buena'.

Un consejo rápido: si tu LCP es una imagen, casi siempre va a ser peor que el texto. Debes rastrear los tipos de elementos LCP en tus datos RUM, de lo contrario estás navegando a ciegas.

Table of Contents!


Definición Precisa: La Espera Crítica Antes de la Descarga

El Resource Load Delay es el tiempo entre el TTFB y cuando el navegador inicia la descarga del recurso LCP. No es el tiempo de descarga; es la latencia de descubrimiento que ocurre antes de que comience el fetch. Un valor alto aquí indica un problema arquitectónico donde el navegador no puede encontrar la URL del recurso en el payload HTML inicial. Este resource load delay puede verse como el tiempo que el navegador dedica a identificar que el recurso LCP es necesario y a decidir buscarlo.

Para elementos LCP basados en texto y renderizados usando una fuente del sistema, este resource load delay es típicamente cero porque no se necesita buscar ningún recurso externo. Valores más altos de resource load delay son específicos de elementos LCP que dependen de un recurso de red externo como una imagen o un archivo de vídeo.

El Motor del Descubrimiento: Preload Scanner vs. DOM Parser

Para reducir el Resource Load Delay, debes entender cómo los navegadores descubren recursos. La eficiencia de este proceso de descubrimiento es el factor principal que determina la latencia. Los navegadores usan dos mecanismos: un camino rápido y un camino lento.

  • El Preload Scanner (El Camino Rápido): Este es un parser secundario de alta velocidad que escanea el HTML en bruto buscando URLs de recursos, como los de las etiquetas <img> o <link>. Los pone en cola para descarga inmediatamente, antes de que el CSS sea analizado o el JavaScript ejecutado. Este es el camino óptimo para cualquier recurso crítico.
  • El DOM Parser (Camino Lento): Este es el parser principal que construye el Document Object Model (DOM) completo y el CSS Object Model (CSSOM). Los recursos no encontrados en el HTML inicial, como un CSS background-image o un elemento inyectado por JavaScript, solo son descubiertos por este parser. Este es el camino lento porque depende de que otros archivos se descarguen y ejecuten primero, creando una cadena de dependencias que introduce alta latencia.

Toda la estrategia para optimizar el Resource Load Delay se basa en un principio: asegurar que la URL del recurso LCP sea descubrible por el preload scanner. Cualquier patrón que oculte la URL del documento HTML inicial obliga al navegador a usar el camino de descubrimiento lento. Este período de espera se traduce directamente en Resource Load Delay. Cada optimización efectiva consiste en arquitectar tu HTML para colocar el recurso LCP en el camino rápido. Para una guía completa sobre priorización de recursos del navegador, consulta nuestro artículo sobre priorización de recursos.

Por qué Importa el Load Delay

Un error común es que un LCP lento es un problema de "tamaño de archivo". Esto lleva a los equipos a centrarse solo en la compresión de imágenes para reducir el Resource Load Duration. Aunque la optimización de assets es un factor, el análisis de datos de campo reales muestra que para muchos sitios con mal LCP, el Resource Load Delay es el principal cuello de botella de rendimiento, no el Resource Load Duration.

Los datos de campo muestran que el sitio mediano con una mala puntuación de LCP tiene un Resource Load Delay de 1,3 segundos. Eso es más de la mitad del presupuesto total de 2,5 segundos para una puntuación LCP 'Buena', todo consumido antes de que la descarga del recurso LCP siquiera comience. Los datos indican que estos sitios pasan casi cuatro veces más tiempo esperando a que comience la descarga que en la descarga misma.

Estos datos exponen una redirección frecuente del esfuerzo de desarrollo. Los equipos pueden pasar semanas eliminando kilobytes de las imágenes para acortar el Load Duration en unos pocos milisegundos, mientras que un problema arquitectónico que causa un Load Delay de 1,5 segundos permanece sin resolver. El LCP es un proceso secuencial; un retraso en una fase temprana no puede recuperarse optimizando una fase posterior. Si un fetch se retrasa más de un segundo, una diferencia de 100ms en el tiempo de descarga es irrelevante para la puntuación final de LCP. Las optimizaciones de mayor impacto involucran cambios arquitectónicos, como mejorar la descubribilidad de recursos, no solo compresión de assets. El enfoque debe cambiar de hacer los assets más pequeños a asegurar que se descubran antes.

Cómo Detectar el Resource Load Delay

Para corregir el Resource Load Delay, primero debes medirlo con precisión. El flujo de trabajo profesional es primero definir el problema con datos de usuarios reales (RUM), y solo después pasar a Chrome DevTools para un análisis profundo.

Paso 1: Analizar Datos de Campo (RUM)

Los datos de campo, o Real User Monitoring (RUM), se recopilan de sesiones de usuarios reales. Las herramientas RUM, como el Chrome User Experience Report (CrUX) público o mi propia herramienta, CoreDash, responden a la pregunta: ¿Qué está sucediendo en el mundo real? Una herramienta RUM completa también proporcionará un desglose de las sub-partes del LCP, mostrándote el Resource Load Delay mediano entre tus usuarios. Estos datos validan que existe un problema de LCP, muestran qué URLs están afectadas y revelan los elementos LCP comunes que tus usuarios realmente están viendo. Debes empezar aquí para confirmar que estás resolviendo un problema real.

Paso 2: Diagnosticar con DevTools

Una vez que tus datos RUM han identificado una página objetivo y un elemento LCP, usas Chrome DevTools para diagnosticar la causa. El objetivo aquí es reproducir el problema y medir las sub-partes del LCP para obtener un valor preciso de Resource Load Delay. DevTools es también donde realizas un Análisis del Main Thread para ver exactamente qué tareas se están ejecutando y potencialmente bloqueando el proceso de renderizado.

Guía Paso a Paso del Panel Performance de Chrome DevTools

El panel Performance en Chrome DevTools es una herramienta indispensable para analizar el LCP y cuantificar el load delay.

1. Configuración:

  • Abre Chrome DevTools haciendo clic derecho en la página y seleccionando "Inspeccionar" o usando el atajo Ctrl+Shift+I (Windows/Linux) o Cmd+Option+I (Mac).
  • Navega a la pestaña Performance.
  • Asegúrate de que la casilla Web Vitals esté habilitada en la configuración de captura. Esto superpondrá información de Core Web Vitals en la línea de tiempo de rendimiento.
  • Para simular condiciones realistas de usuario, aplica limitación de CPU y Red. Un "4x slowdown" para CPU y un perfil de red "Fast 3G" o "Slow 4G" son puntos de partida comunes para pruebas en dispositivos móviles.

2. Grabar un Perfil de Performance:

  • Haz clic en el botón "Record and reload page" (un icono de flecha circular) en el panel Performance. Esto iniciará una grabación, recargará la página y luego detendrá la grabación una vez que la página esté completamente cargada.

3. Análisis e Interpretación:

  • Pista de Timings: En la vista principal de la línea de tiempo, localiza la pista Timings. Verás un marcador etiquetado como LCP. Al pasar el cursor sobre este marcador se resaltará el elemento LCP correspondiente en la captura de pantalla del viewport principal y mostrará el tiempo total de LCP.
  • Desglose del LCP por Fase: Haz clic en el marcador LCP en la pista Timings. En la pestaña Summary en la parte inferior del panel, encontrarás un desglose detallado del timing del LCP. Este desglose muestra explícitamente la duración de cada una de las cuatro sub-partes, incluyendo el Load delay, medido en milisegundos. Este valor es la medición más directa y precisa del Resource Load Delay para esa carga de página específica.
  • Análisis del Main Thread: Mientras examinas la línea de tiempo, observa la pista Main buscando cualquier long task (bloques de actividad marcados con un triángulo rojo). Si estas long tasks ocurren después de que el recurso LCP haya terminado de cargarse pero antes del marcador LCP, probablemente están contribuyendo al Element Render Delay, un problema relacionado pero distinto.

Causas Comunes y Soluciones de Alto Impacto

Un Resource Load Delay alto es causado por una de dos cosas: el recurso LCP se descubre tarde, o se le asigna una prioridad de fetch baja. Aquí están los errores arquitectónicos más comunes y sus soluciones.

Causa: LCP Cargado vía CSS

El Problema: El preload scanner no analiza archivos CSS. Cuando tu imagen LCP está definida con un CSS background-image, su URL es invisible para este scanner de alta velocidad. El navegador solo puede descubrir la imagen después de descargar el HTML, encontrar el enlace del archivo CSS, descargar el archivo CSS, construir el CSSOM y luego aplicar el estilo. Esta cadena de dependencias causa directamente un Resource Load Delay alto. Para más información sobre este patrón, consulta nuestra guía sobre diferir background images.

La Solución: La implementación correcta es evitar usar background-image para cualquier elemento LCP crítico. Usa una etiqueta <img> estándar en su lugar. Esto coloca la URL de la imagen directamente en el HTML donde el preload scanner puede encontrarla inmediatamente. Puedes lograr el mismo resultado visual con CSS.

Ejemplo de Implementación:

Anti-Patrón (No Hagas Esto):

    <!-- CSS -->
   .hero {
      background-image: url('hero-image.jpg');
      height: 500px;
      width: 100%;
    }

    <!-- HTML -->
    <div class="hero"></div>
    

Mejor Práctica (Haz Esto en Su Lugar):

    <!-- HTML -->
    <div class="hero-container">
      <img
        src="hero-image.jpg"
        alt="A descriptive alt text for the hero image"
        fetchpriority="high"
        class="hero-background-img"
        width="1200"
        height="500"
      />
      <div class="hero-content">
        <h1>Page Title</h1>
      </div>
    </div>

    <!-- CSS -->
   .hero-container {
      position: relative;
      height: 500px;
      width: 100%;
    }

   .hero-background-img {
      position: absolute;
      inset: 0; /* Equivalent to top: 0; right: 0; bottom: 0; left: 0; */
      width: 100%;
      height: 100%;
      object-fit: cover; /* This property mimics background-size: cover */
      z-index: -1; /* Places the image behind other content */
    }
    

Esta implementación proporciona el mismo resultado visual pero hace que la imagen LCP sea descubrible en el momento más temprano posible, lo que minimiza su load delay.

Causa: Client-Side Rendering e Inyección por JavaScript

El Problema: Las aplicaciones que usan frameworks de client-side rendering (CSR) como React o Vue a menudo sirven un shell HTML mínimo. El contenido real, incluyendo la etiqueta LCP <img>, solo se inserta en el DOM por JavaScript después de que los paquetes grandes del framework se descargan, analizan y ejecutan. Este proceso oculta fundamentalmente el recurso LCP del preload scanner, creando alta latencia de descubrimiento.

La Solución: La solución más efectiva es mover el renderizado inicial del cliente al servidor.

  • Server-Side Rendering (SSR) o Static Site Generation (SSG): Patrones arquitectónicos como SSR o SSG generan el HTML completo en el servidor. El navegador recibe un documento completo que contiene la etiqueta <img> y su atributo src, haciendo que el recurso LCP sea inmediatamente descubrible por el preload scanner. Esta es la arquitectura requerida para cualquier página crítica en términos de rendimiento.
  • Optimizaciones Específicas del Framework: Los frameworks modernos también proporcionan optimizaciones integradas. Por ejemplo, el componente <Image> de Next.js tiene una propiedad priority. Establecerla como true instruye al framework a añadir automáticamente los atributos correctos <link rel="preload"> y fetchpriority="high", asegurando que la imagen se descubra y busque con la prioridad correcta.

Causa: Usar loading="lazy" en la Imagen LCP

El Problema: Este es un error frecuente y de alto impacto. El atributo loading="lazy" es una instrucción directa al navegador para retrasar la búsqueda de una imagen hasta que esté cerca del viewport. Aunque esta es la optimización correcta para imágenes debajo del fold, aplicarla a un elemento LCP encima del fold es contraproducente. El preload scanner del navegador está diseñado para ignorar imágenes con loading="lazy", lo que garantiza un descubrimiento tardío y un Resource Load Delay alto.

La Solución: La solución requiere diligencia.

  • Elimina loading="lazy" de la Imagen LCP: Cualquier imagen que probablemente sea el elemento LCP no debe tener el atributo loading="lazy". El comportamiento predeterminado del navegador es loading="eager", que es la configuración correcta para contenido crítico encima del fold. Omitir completamente el atributo loading tiene el mismo efecto.
  • Audita y Configura Herramientas de Terceros: También debes auditar herramientas de terceros. Muchas plataformas CMS como WordPress y varios plugins de optimización de imágenes aplican automáticamente lazy loading a todas las imágenes. Es esencial configurar estas herramientas para excluir la imagen LCP de este comportamiento. Esto a menudo implica crear una regla de exclusión para las primeras una o dos imágenes de la página.

Causa: Estructura HTML Subóptima y Documentos Grandes

El Problema: El preload scanner procesa el documento HTML de arriba a abajo. Si recursos no críticos pero que consumen mucho ancho de banda, como iconos del encabezado o scripts de widgets de chat, se colocan más arriba en el <body> que el elemento LCP, se descubren y ponen en cola de descarga primero. Esto consume el ancho de banda inicial y puede retrasar la descarga del recurso LCP. Un documento HTML grande también puede ser un problema; si el elemento LCP no está en el primer fragmento de datos que recibe el navegador (aproximadamente 14KB), su descubrimiento se retrasa al menos un viaje de ida y vuelta de red.

La Solución: Optimiza la estructura y prioridad del contenido dentro del HTML.

  • Reordena el HTML: Cuando sea posible, asegúrate de que la etiqueta <img> o bloque de texto para el elemento LCP aparezca lo más temprano posible dentro de la etiqueta <body>.
  • Desprioriza Imágenes No Críticas: Para imágenes no esenciales que deben aparecer temprano en el código fuente HTML (como iconos en un encabezado), aplica loading="lazy". Esto le dice al preload scanner que las ignore, preservando la cola de descarga para el elemento LCP.
  • Difiere Scripts No Esenciales: Los scripts para analytics, publicidad o widgets de redes sociales raramente son críticos para el renderizado inicial. Mueve sus etiquetas <script> al final del <body> o usa el atributo defer. Esto evita que bloqueen el parser o compitan por ancho de banda con el recurso LCP.

Priorización Avanzada con Resource Hints

Una vez que el recurso LCP es descubrible en el HTML, puedes usar resource hints para darle al navegador instrucciones más explícitas sobre cómo buscarlo. Estos hints proporcionan control granular sobre el descubrimiento y la priorización.

Forzar el Descubrimiento Temprano con <link rel="preload">

<link rel="preload"> no es un hint; es una directiva. Obliga al navegador a descargar un recurso con alta prioridad, incluso si aún no es descubrible por el parser principal. Colocarlo en el <head> de tu HTML es la forma más directa de corregir problemas de descubrimiento tardío para recursos como fuentes, CSS background images o imágenes LCP ubicadas en lo profundo del DOM. Para detalles completos de implementación y ejemplos, consulta nuestra guía dedicada sobre cómo hacer preload de la imagen LCP.

Mecanismo

Cuando un enlace preload se coloca en el <head> del documento HTML, el preload scanner lo identifica e inmediatamente pone en cola el recurso especificado para descarga. Esto es ideal para recursos como fuentes cargadas vía @font-face en una stylesheet externa, LCPs de CSS background-image (aunque se prefiere usar una etiqueta <img>), o una imagen LCP ubicada en lo profundo de una estructura DOM compleja.

Preloading Responsivo

Un detalle crítico de implementación es necesario al hacer preload de imágenes responsivas. Para asegurar que el navegador haga preload de la imagen con el tamaño correcto para el viewport del usuario y evite una doble descarga desperdiciada, la etiqueta <link rel="preload"> debe incluir atributos imagesrcset e imagesizes que reflejen perfectamente los atributos en la etiqueta <img> correspondiente.

Ejemplo de Preloading Responsivo:

<link rel="preload" as="image"
      href="lcp-image-large.jpg"
      imagesrcset="lcp-image-small.jpg 400w, lcp-image-medium.jpg 800w, lcp-image-large.jpg 1200w"
      imagesizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
      fetchpriority="high">

<img src="lcp-image-large.jpg"
     srcset="lcp-image-small.jpg 400w, lcp-image-medium.jpg 800w, lcp-image-large.jpg 1200w"
     sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
     alt="A descriptive alt text"
     fetchpriority="high"
     width="1200" height="675">
    

Trampa Potencial

El preloading resuelve el timing de fetch (Load Delay y Load Duration) pero no el timing de pintado. Si el main thread está bloqueado por JavaScript pesado o CSS que bloquea el renderizado cuando la imagen preloaded llega, la imagen aún tendrá que esperar para ser renderizada, lo que puede cambiar el cuello de botella de Load Delay a Element Render Delay.

fetchpriority="high" y la Cola de Prioridad del Navegador

El atributo fetchpriority es un hint que señala la importancia relativa de la descarga de un recurso. Te permite influir en la prioridad de un recurso dentro de la cola de descarga del navegador.

Cómo Funciona la Prioridad del Navegador

Cuando el navegador descubre recursos durante la carga de la página, asigna a cada uno un nivel de prioridad interno. Por defecto, las imágenes en el viewport comienzan con prioridad "Baja" y luego se actualizan a "Alta" una vez que el navegador completa el layout y determina que son visibles. Esta actualización requiere que el navegador primero descargue y analice el CSS, lo que crea un retraso. El atributo fetchpriority="high" evita este proceso por completo al establecer la imagen en prioridad "Alta" desde el momento en que se descubre. Esto es especialmente impactante para imágenes LCP porque elimina el retraso de actualización de prioridad.

preload vs. fetchpriority

Estos dos hints sirven propósitos diferentes pero complementarios. preload afecta cuándo un recurso se descubre y se añade a la cola. fetchpriority afecta su nivel de prioridad una vez que está en la cola. Comprender esta distinción es crítico: preload resuelve el descubrimiento tardío, mientras que fetchpriority resuelve la baja priorización. Para muchas imágenes LCP que ya están en el HTML, fetchpriority solo puede ser suficiente. Para una guía completa sobre cómo estos interactúan, consulta nuestro artículo sobre priorización de recursos.

Mejor Práctica para LCP

Para la imagen LCP, la estrategia óptima es usarlos juntos. Primero, asegura el descubrimiento temprano ya sea colocando la etiqueta <img> temprano en el HTML o usando preload. Segundo, añade fetchpriority="high" directamente a la etiqueta <img> (y al enlace preload, si se usa). Esta combinación asegura que el recurso no solo se descubre temprano sino que también recibe la mayor prioridad posible para ganar la competencia por ancho de banda contra otros recursos como stylesheets o fuentes.

Ejemplo:

<img src="lcp-image.jpg" fetchpriority="high" alt="A critical hero image">

Cuándo Usar fetchpriority="low"

El atributo fetchpriority no es solo para aumentar prioridad. También puedes usar fetchpriority="low" para despriorizar recursos no críticos que compiten por ancho de banda con la imagen LCP. Los candidatos comunes incluyen imágenes encima del fold que no son el elemento LCP (como pequeños iconos o avatares en el encabezado), y recursos preloaded que son necesarios pero no urgentes. Al bajar explícitamente la prioridad de estos recursos competidores, creas más espacio de ancho de banda para la imagen LCP.

<!-- LCP image: high priority -->
<img src="hero.jpg" fetchpriority="high" alt="Hero image" width="1200" height="600">

<!-- Non-critical above-fold image: low priority -->
<img src="avatar.jpg" fetchpriority="low" alt="Author avatar" width="48" height="48">

Impacto Demostrado

En un caso de estudio con Google Flights, añadir fetchpriority="high" a la imagen de background LCP de la página mejoró el tiempo de LCP de 2,6 segundos a 1,9 segundos, una mejora de 700ms.

Optimizar Conexiones de Terceros: preconnect y dns-prefetch

El Problema

Si tu recurso LCP está alojado en un dominio de terceros, como un CDN de imágenes o un proveedor de fuentes como Google Fonts, el navegador debe establecer una nueva conexión de red con ese dominio. Este proceso implica una consulta DNS, un handshake TCP y una negociación TLS, todo lo cual debe completarse antes de que se pueda descargar el primer byte del recurso. Este tiempo de configuración de conexión es un contribuidor directo al Resource Load Delay para assets cross-origin.

Las Soluciones

  • preconnect: Este hint instruye al navegador a realizar la configuración completa de conexión (DNS, TCP y TLS) para un origen de terceros especificado en segundo plano, con anticipación. Cuando el recurso se solicita realmente, la conexión ya está caliente, eliminando la latencia de configuración. Esto es altamente efectivo y recomendado para los uno o dos dominios de terceros más críticos que sirven recursos LCP.
  • dns-prefetch: Este es un hint más ligero que solo realiza la consulta DNS para un dominio. Ahorra menos tiempo que preconnect pero tiene soporte más amplio de navegadores y es útil como fallback o para dominios de terceros menos críticos.

Mejor Práctica de Implementación

Para asegurar máxima compatibilidad, proporciona ambos hints. El navegador usará preconnect si está soportado y recurrirá a dns-prefetch si no. El atributo crossorigin es esencial para recursos buscados usando CORS, como fuentes.

<link rel="preconnect" href="https://my-image-cdn.com" crossorigin>
<link rel="dns-prefetch" href="https://my-image-cdn.com">

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>    

Tabla: Comparación de Resource Hints para Optimización de LCP

Para prevenir el uso incorrecto y clarificar los roles distintos de estos poderosos hints, la siguiente tabla proporciona un resumen comparativo.

Hint Tipo Propósito Principal Impacto en el LCP Load Delay Mejor Caso de Uso para LCP
preload Directiva Forzar un fetch temprano de un recurso específico Elimina directamente el retraso de descubrimiento para recursos encontrados tarde Una imagen LCP descubierta tarde (ej: de CSS background-image) o fuente.
fetchpriority Hint Señalar la prioridad de descarga de un recurso descubierto Reduce el retraso de cola al elevar la prioridad sobre otros assets La etiqueta <img> del LCP, para asegurar que se descargue antes que recursos menos críticos.
preconnect Hint Calentar la conexión de red completa a un dominio Elimina el tiempo de configuración de conexión cross-origin (DNS, TCP, TLS) El dominio crítico de terceros que aloja la imagen o fuente LCP.
dns-prefetch Hint Calentar solo la consulta DNS para un dominio Reduce la porción de consulta DNS del tiempo de conexión cross-origin Un fallback para preconnect o para dominios de terceros menos críticos.

Estrategias Holísticas y Orientadas al Futuro

Más allá de los resource hints, decisiones arquitectónicas más amplias pueden reducir el Resource Load Delay aún más.

El Papel de un CDN Moderno

Una Content Delivery Network (CDN) es una tecnología fundamental para el rendimiento web que reduce indirecta pero significativamente el Resource Load Delay, especialmente para recursos LCP.

  • Reducir la Sobrecarga de Conexión: Al distribuir assets a través de una red global de servidores, un CDN coloca el contenido geográficamente más cerca del usuario. Esto inherentemente reduce el tiempo de ida y vuelta (RTT) requerido para la consulta DNS, handshake TCP y negociación TLS, que son todos componentes del tiempo de configuración de conexión. Para una imagen LCP alojada en un CDN, esto reduce directamente su load delay.
  • CDNs de Imagen: Los CDNs de Imagen especializados ofrecen un doble beneficio. Proporcionan la ventaja de proximidad de un CDN estándar mientras también automatizan muchas optimizaciones complejas que reducen el Resource Load Duration, como redimensionamiento de imágenes en tiempo real, compresión y conversión a formatos modernos como AVIF y WebP.
  • Protocolos Avanzados: Muchos CDNs modernos usan HTTP/3, que usa QUIC en lugar de TCP. HTTP/3 reduce el tiempo de configuración de conexión y mitiga el bloqueo head-of-line, llevando a una entrega de recursos más rápida y eficiente en general.

Eliminar el Delay Completamente con Speculation Rules

La Speculation Rules API puede eliminar completamente el delay de LCP para navegaciones subsiguientes.

Mecanismo

Esta API permite a los desarrolladores informar declarativamente al navegador sobre a qué URLs es probable que un usuario navegue a continuación. Basándose en estas reglas, el navegador puede elegir prerenderizar una página objetivo en una pestaña oculta de fondo antes de que el usuario siquiera haga clic en el enlace.

Impacto en el LCP

Cuando el usuario hace clic en un enlace a una página prerenderizada, la navegación es virtualmente instantánea. La página ya ha sido completamente cargada y renderizada en segundo plano. Para esta navegación, el TTFB, Resource Load Delay, Resource Load Duration y Element Render Delay se reducen efectivamente a casi cero desde la perspectiva del usuario.

Ejemplo de Caso de Uso

En una página de categoría de e-commerce, las speculation rules podrían usarse para prerenderizar las páginas de detalle de producto para los primeros ítems de la lista. Cuando un usuario hace clic en uno de estos productos, la página aparece instantáneamente.

Síntesis de Casos de Estudio: De la Teoría a la Práctica

Estas optimizaciones tienen un impacto medible en el mundo real.

  • Caso 1: El Poder Transformador del Preloading: Un experimento realizado por DebugBear en una página con un alto load delay proporciona un ejemplo dramático. La imagen LCP estaba oculta en una cadena de peticiones, causando que el Resource Load Delay representara un asombroso 75% del tiempo total de LCP. Al implementar un único hint <link rel="preload"> para hacer la imagen descubrible temprano, el Resource Load Delay se redujo a solo el 2% del tiempo de LCP. Esto demuestra cómo una simple corrección arquitectónica puede resolver un cuello de botella masivo de rendimiento.
  • Caso 2: El Anti-Patrón Real de loading="lazy": Un desarrollador en Stack Overflow reportó un LCP de escritorio con un desconcertante load delay de 1.430ms a pesar de una red rápida. La causa se rastreó hasta un plugin de optimización de imágenes que estaba incorrectamente aplicando lazy loading a la imagen LCP al reemplazar su atributo src con un SVG placeholder transparente. La solución definitiva fue desactivar este comportamiento para el elemento LCP, permitiendo que fuera descubierto y cargado ávidamente. Esto ilustra cómo herramientas de terceros pueden inadvertidamente introducir load delays severos.
  • Caso 3: El Impulso de Rendimiento de fetchpriority: El caso de estudio de Google Flights proporciona evidencia clara del impacto de la priorización explícita. Al simplemente añadir fetchpriority="high" a la imagen de background LCP de la página, la puntuación de LCP mejoró en 700ms, bajando de 2,6 segundos a 1,9 segundos. Esto demuestra que incluso cuando un recurso es descubrible, señalar su alta importancia al navegador es un paso crítico para ganar la carrera por el ancho de banda.

Inspección de Red en Chrome DevTools: Usa el atajo Ctrl + Shift + I para abrir las Herramientas de Desarrollo de Chrome, luego selecciona la pestaña "Network" y recarga la página. Observa la secuencia de carga. Tu recurso LCP debería ser uno de los primeros elementos en la cola de descarga. Si está rezagado detrás de otros elementos, hay un problema de resource load delay. A continuación se muestra un ejemplo de un sitio donde el resource load delay no ha sido optimizado.

Usa Datos de Real User Monitoring (RUM): Las herramientas de Real User Monitoring frecuentemente registran datos de atribución de LCP. Con RUM, puedes visualizar el desglose de las sub-partes del LCP (a lo largo del tiempo o por página), dándote una imagen clara del load delay para elementos LCP en todo tu sitio o por página. El ejemplo a continuación muestra un desglose global de LCP junto con el load delay correspondiente.

Cómo Mejorar el Load Delay

Un resource load delay ocurre cuando el orden y el timing de descarga de los recursos no son óptimos. Hay, en esencia, dos formas directas de corregir esto: priorizar el recurso LCP o despriorizar los recursos No-LCP. Exploremos algunos patrones comunes:

Consejo de LCP: Entiende el Preload Scanner: Los navegadores modernos usan un mecanismo llamado preload scanner, que escanea rápidamente el HTML y pone recursos en cola de descarga. Si un recurso no puede ser puesto en cola por el preload scanner, tendrá que esperar al DOM parser más lento, resultando en retrasos. Asegurar que tus recursos LCP sean descubribles por el preload scanner puede marcar una gran diferencia en la reducción del load delay.

1. Optimiza la Estructura HTML

El navegador (o el preload scanner) procesa tu HTML de arriba a abajo, poniendo en cola los recursos en el orden en que aparecen. Esto significa que cuanto más arriba aparezca el recurso LCP en el HTML, antes se pone en cola. Para optimizar esto, elimina o difiere recursos innecesarios de la parte superior del HTML:

  • Lazy-Load de Imágenes No Importantes u Ocultas: A veces imágenes (por ejemplo banderas para versiones específicas de idioma de tu sitio o imágenes en el menú) se encuentran en la parte superior del HTML de tu sitio. Estas imágenes no son ni de lejos tan importantes como el elemento LCP. Al hacer lazy-load de estas imágenes, son ignoradas por el preload scanner y puestas en cola un poco más tarde durante el proceso de carga.
  • Mueve scripts no importantes al final de la página: Mueve scripts que son absolutamente no importantes para la carga inicial al final de la página para evitar que retrasen recursos críticos. Por ejemplo, un widget de chat. ¡Nadie en la historia de internet ha necesitado jamás chatear antes de que la página fuera visible!

2. Evita Background Images

Las background images son invisibles para el preload scanner, lo que significa que siempre serán puestas en cola por el DOM parser mucho más lento. Para evitar este retraso, usa una etiqueta <img> regular en su lugar, combinada con la propiedad CSS object-fit: cover para imitar la apariencia de una background image. De esta forma, el preload scanner puede detectar y poner en cola la imagen inmediatamente.

3. Usa Fetch Priority

Añade el atributo fetchpriority="high" a tu elemento LCP para indicar al navegador que debe priorizar este recurso desde el principio. Normalmente, las imágenes cargan con una prioridad predeterminada baja o media. Durante la fase de layout, el navegador actualiza los elementos visibles a prioridad alta. Al establecer fetchpriority="high", la descarga comienza inmediatamente con prioridad alta, asegurando un LCP más rápido.

El fetchpriority es generalmente menos intrusivo (y menos efectivo) que el preloading porque establece la prioridad relativa de un elemento (en este caso la imagen es relativamente más importante que otras imágenes) pero no la hace más importante que, por ejemplo, stylesheets o scripts no bloqueantes.

<img src="hero-image.jpg" alt="Hero Image" fetchpriority="high">

4. Implementa Preloading

El preloading cambia el orden en que el preload scanner pone archivos en cola. Coloca la etiqueta <link rel="preload"> en el head de la página para instruir al navegador a buscar recursos críticos, como la imagen LCP, lo antes posible. Los preloads pueden usarse para hacer preload de recursos que se referencian más adelante en el HTML (y por lo tanto se ponen en cola más tarde) o incluso para hacer preload de recursos que aún no se referencian en el HTML (como con algunos sliders). Para máxima efectividad se recomienda colocar los preloads después de las stylesheets y antes de los scripts en el head de la página.

<link rel="preload" as="image" href="hero-image.jpg">

5. Optimiza los Estilos

Las stylesheets normalmente se ponen en cola antes del recurso LCP y eso es con buena razón. Sin stylesheets el navegador no sabrá cómo se verá la página y no puede iniciar la fase de renderizado. Sin embargo, un tamaño excesivo de CSS y un número excesivo de stylesheets competirán con el recurso LCP por el ancho de banda inicial.

6. Implementa Lazy-Loading Eficiente

El atributo loading puede ser un arma de doble filo. Usa loading="eager" (o simplemente omite el atributo ya que "eager" es el valor predeterminado del navegador) para tu recurso LCP, mientras aplicas loading="lazy" para imágenes fuera de pantalla.

  • Carga Eager el Elemento LCP: Si el elemento LCP tiene lazy-load, no será puesto en cola por el preload scanner y cargará mucho más tarde, impactando negativamente el rendimiento.
  • Lazy-Load de Imágenes del Viewport: Para imágenes que están en el viewport visible pero no son recursos LCP, usa loading="lazy" para ponerlas en cola de descarga ligeramente más tarde. Esto reduce la competencia de ancho de banda con el recurso LCP.
  • Evita Lazy Loading de Imágenes Fuera de Pantalla: Las imágenes que no están en el viewport visible no activarán ninguna descarga en absoluto, eliminando completamente la competencia de ancho de banda.

7. Caché del Navegador

La caché del navegador te permite saltar peticiones de red para recursos que ya han sido almacenados localmente en el dispositivo del usuario. Aunque no acelerará la primera vista de la página, mejorará los tiempos de carga para vistas posteriores y visitantes recurrentes. Así es como la caché del navegador ayuda con el resource load delay:

  • Cachea Recursos Competidores: Aunque cachear el recurso LCP en sí es una gran estrategia, la caché del navegador mejora los resource load delays del LCP al almacenar recursos de red que podrían competir con o retrasar el recurso LCP, como scripts, stylesheets e imágenes.
  • Reduce la Carga del Servidor: El caché disminuye el número de peticiones enviadas a tu servidor, lo que puede mejorar el rendimiento de otros recursos al liberar ancho de banda y reducir ciclos de CPU del servidor.

8. Usa Speculation Rules

Las Speculation Rules permiten a los navegadores hacer prefetch o prerenderizar páginas web basándose en la navegación predicha del usuario. El prefetching elimina efectivamente la sub-parte Time to First Byte del LCP y no tiene impacto en el resource load delay. El prerendering renderiza la siguiente página en una pestaña oculta y descarga todos los recursos de la página. Esto elimina todos los load delays para el elemento LCP como se muestra en este ejemplo de desglose de LCP de una página prerenderizada.

9. Evita Client-Side Rendering

El client-side rendering (CSR) es una de las peores cosas que se pueden hacer en cuanto a resource load delay. Cuando un elemento LCP se renderiza del lado del cliente, se inyecta en la página vía JavaScript. Esto significa que el recurso LCP no está presente en el HTML inicial de la página. Como resultado, el navegador debe primero descargar y ejecutar múltiples scripts antes de poder siquiera comenzar a poner el recurso en cola.

Esta sobrecarga adicional ralentiza los tiempos de carga e impacta negativamente la experiencia del usuario, ya que el contenido crítico tarda más en renderizarse. Para optimizar el rendimiento y mejorar los tiempos de carga, es mejor evitar el client-side rendering en favor del server-side rendering o la generación de sitios estáticos, que asegura que los recursos LCP estén disponibles en el HTML inicial.

Próximos Pasos: Continúa Optimizando el LCP

El Resource Load Delay es una de las cuatro fases del LCP. Una vez que hayas minimizado la latencia de descubrimiento, continúa con estas guías:

  • Corregir e Identificar Problemas de LCP: La metodología diagnóstica completa para encontrar y corregir todos los problemas de LCP.
  • Optimizar la Imagen LCP: Selección de formato de imagen, imágenes responsivas, preloading y errores comunes con imágenes.
  • Resource Load Duration: Después de que el navegador descubra el recurso, reduce cuánto tiempo tarda en descargarse mediante compresión, formatos modernos y optimización de CDN.
  • Element Render Delay: Después de que el recurso se descargue, asegúrate de que el navegador pueda pintarlo inmediatamente al liberar el main thread.

I have done this before at your scale.

Complex platforms, large dev teams, legacy code. I join your team as a specialist, run the performance track, and hand it back in a state you can maintain.

Discuss Your Situation
Optimizar el LCP Resource Load DelayCore Web Vitals Optimizar el LCP Resource Load Delay