Lazy Loading


¿Qué es Lazy Loading?

Lazy loading (carga diferida) es una estrategia de optimización que pospone la carga de recursos — imágenes, componentes, scripts — hasta el momento en que se van a usar. En lugar de cargar todo al inicio, la página carga solo lo imprescindible y el resto se carga bajo demanda.

¿Para qué se utiliza?

El lazy loading se aplica para:

  • Reducir el tiempo de carga inicial (Time to Interactive) de páginas web.
  • Ahorrar datos en conexiones lentas o dispositivos móviles.
  • Cargar imágenes solo cuando el usuario hace scroll hasta ellas.
  • Dividir bundles de JavaScript en fragmentos que se cargan según la ruta.
  • Mejorar métricas de rendimiento como LCP y FID en Core Web Vitals.

¿Cómo funciona?

Imagina una biblioteca enorme con miles de libros. En lugar de acarrear todos los libros a tu mesa nada más entrar, solo traes los que necesitas ahora. Si luego quieres otro, vas a buscarlo. Lazy loading aplica exactamente esa lógica: carga lo que necesitas ahora y pide el resto cuando haga falta.

Ejemplo: Lazy loading de imágenes con HTML nativo

<!-- Sin lazy loading: todas las imágenes cargan al abrir la página -->
<img src="/img/hero.jpg" alt="Hero" />
<img src="/img/seccion-2.jpg" alt="Sección 2" />
<img src="/img/footer.jpg" alt="Footer" />

<!-- Con lazy loading: solo carga la imagen cuando entra en el viewport -->
<img src="/img/hero.jpg" alt="Hero" />
<!-- loading="eager" para la imagen principal (above the fold) -->

<img src="/img/seccion-2.jpg" alt="Sección 2" loading="lazy" />
<img src="/img/footer.jpg" alt="Footer" loading="lazy" />

Ejemplo: Lazy loading de componentes en React

import { lazy, Suspense } from 'react';

// Sin lazy loading: el bundle incluye este componente siempre
// import GraficoComplejo from './GraficoComplejo';

// Con lazy loading: se descarga solo si el usuario llega hasta aquí
const GraficoComplejo = lazy(() => import('./GraficoComplejo'));

function Dashboard() {
  return (
    <div>
      <h1>Panel principal</h1>
      <Suspense fallback={<p>Cargando gráfico...</p>}>
        <GraficoComplejo /> {/* Se descarga solo cuando se renderiza */}
      </Suspense>
    </div>
  );
}

Lazy loading es especialmente útil en páginas largas con muchas imágenes o aplicaciones con muchas rutas. Combinado con code splitting, puede reducir drásticamente el peso inicial de una web.