Lazy loading, o “carga diferida”, es una técnica de optimización utilizada en desarrollo web para retrasar la carga de recursos no críticos hasta que sean necesarios.
Esto mejora el rendimiento inicial de una aplicación o página web, reduciendo el tiempo de carga y ahorrando ancho de banda.
Lazy loading es un enfoque que permite cargar solo los elementos esenciales de una página durante su renderizado inicial.
Los recursos no visibles o requeridos, como imágenes fuera de la vista o componentes secundarios, se cargan dinámicamente cuando el usuario los necesita, como al desplazarse o interactuar.
Beneficios principales de lazy loading:
En HTML, el lazy loading se utiliza principalmente para optimizar imágenes y iframes.
HTML5 introduce el atributo loading
en las etiquetas <img>
.
<img src="imagen-ejemplo.jpg" alt="Descripción" loading="lazy">
Cómo funciona:
loading="lazy"
se agrega a una imagen, el navegador pospone su carga hasta que esté cerca del viewport.Los iframes también soportan el atributo loading
:
https://www.ejemplo.com
Para navegadores que no soportan loading="lazy"
o para un control más personalizado, se puede usar JavaScript con la API de Intersection Observer.
const images = document.querySelectorAll('img[data-src]'); const lazyLoad = (entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.removeAttribute('data-src'); observer.unobserve(img); } }); }; const observer = new IntersectionObserver(lazyLoad); images.forEach(img => observer.observe(img));
HTML asociado:
<img data-src="imagen-ejemplo.jpg" alt="Descripción">
React soporta lazy loading de componentes mediante la función React.lazy
y Suspense
.
import React, { Suspense } from 'react'; const ComponentePesado = React.lazy(() => import('./ComponentePesado')); function App() { return ( <div> <h1>Aplicación React</h1> <Suspense fallback={<div>Cargando...</div>}> <ComponentePesado /> </Suspense> </div> ); } export default App;
Cómo funciona:
React.lazy
carga el componente solo cuando es necesario.Suspense
muestra un contenido de reserva (fallback) mientras el componente se carga.En Angular, lazy loading se utiliza para cargar módulos bajo demanda. Esto se logra mediante el enrutador.
@NgModule({ declarations: [ComponentePesadoComponent], imports: [CommonModule], }) export class ComponentePesadoModule {}
const routes: Routes = [ { path: 'componente-pesado', loadChildren: () => import('./componente-pesado/componente-pesado.module').then(m => m.ComponentePesadoModule) } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule {}
Cómo funciona:
En Vue, la carga diferida se implementa mediante defineAsyncComponent
o el sistema de enrutamiento.
import { defineAsyncComponent } from 'vue'; const ComponentePesado = defineAsyncComponent(() => import('./ComponentePesado.vue') ); export default { components: { ComponentePesado } };
const routes = [ { path: '/componente-pesado', component: () => import('./ComponentePesado.vue') } ]; const router = createRouter({ history: createWebHistory(), routes }); export default router;
Cómo funciona:
Lazy loading es una herramienta clave para optimizar aplicaciones web modernas, mejorando el rendimiento y la experiencia del usuario.
Su implementación varía según el entorno (HTML, JavaScript, React, Angular o Vue), pero el principio es siempre el mismo: cargar los recursos cuando realmente se necesitan.
Pingback: Microfrontends: Qué son, cómo y cuándo implementarlos – ejemplos – Niaxus