Skip to content
SP StackPractices
intermediate

Guía de Optimización de Performance Web

Guía completa para optimizar el rendimiento de aplicaciones web con mejores Core Web Vitals y experiencia de usuario.

Resumen

La performance es una feature. Los sitios lentos pierden usuarios, ingresos y rankings de búsqueda. Esta guía cubre técnicas prácticas para mejorar Core Web Vitals y ofrecer experiencias rápidas.

Core Web Vitals

Google mide tres métricas para la experiencia de página:

MétricaObjetivoMide
LCP< 2.5sLargest Contentful Paint — velocidad de carga del contenido principal
INP< 200msInteraction to Next Paint — capacidad de respuesta
CLS< 0.1Cumulative Layout Shift — estabilidad visual

Cómo Medir

  • Lighthouse: Integrado en Chrome DevTools
  • PageSpeed Insights: Herramienta online con datos de campo
  • Web Vitals Extension: Extensión de Chrome para monitoreo en tiempo real

Optimización de Imágenes

Las imágenes suelen ser el recurso más pesado de una página.

Formatos Modernos

FormatoCaso de UsoAhorro
WebPReemplazo general de JPEG/PNG25-35%
AVIFMáxima compresión50% vs JPEG
SVGIconos, logos, gráficos simplesEscalable, diminuto

Lazy Loading

<!-- Lazy loading nativo -->
<img src="photo.jpg" loading="lazy" alt="...">

Estrategias de Caché

Un caché adecuado elimina solicitudes de red redundantes.

Encabezados HTTP de Caché

EstrategiaCaso de UsoHeader
ImmutableAssets versionados (nombres con hash)Cache-Control: public, max-age=31536000, immutable
RevalidatePáginas HTML que pueden actualizarseCache-Control: max-age=0, must-revalidate
Stale-while-revalidateRespuestas de APICache-Control: max-age=3600, stale-while-revalidate=86400

Optimización de JavaScript

Bundle Splitting

// Vite / Webpack: imports dinámicos para rutas
const HomePage = () => import('./pages/HomePage.js');
const Dashboard = () => import('./pages/Dashboard.js');

Estrategias de Code Splitting

EstrategiaCuándo Usar
Basada en rutasCada página tiene su propio bundle
Basada en componentesComponentes pesados se cargan bajo demanda
Basada en libreríasVendors comunes en un chunk separado

Optimización de CSS

/* CSS crítico inline en <head> */
<style>
  /* Estilos above-the-fold únicamente */
  .header { ... }
  .hero { ... }
</style>

<!-- CSS no crítico cargado asíncronamente -->
<link rel="preload" href="styles.css" as="style" onload="this.rel='stylesheet'">

Optimizaciones del Servidor

Compresión

EstrategiaFormatoBeneficio
GzipGeneralReducción del 60-70%
BrotliGeneralReducción del 70-80%

Uso de CDN

  • Servir assets estáticos desde ubicaciones edge
  • Usar HTTP/2 o HTTP/3 para multiplexación
  • Habilitar optimización automática de imágenes

Buenas Prácticas

  • Establecer width/height explícitos en imágenes para prevenir CLS
  • Diferir JavaScript no crítico con defer o async
  • Preload recursos críticos: fuentes, imágenes hero, CSS principal
  • Usar resource hints: dns-prefetch, preconnect, prefetch
  • Medir antes de optimizar: Perfilear con DevTools primero

Errores Comunes

  • Optimización prematura sin medición
  • Cachear excesivamente respuestas de API que cambian frecuentemente
  • Cargar todas las imágenes eager en páginas largas
  • No comprimir respuestas de API (JSON)

Preguntas Frecuentes

Cuál es la optimización de performance más impactante para web apps?

La optimización de imágenes típicamente entrega el mayor impacto. Convertir a WebP/AVIF, usar imágenes responsive y lazy loading de imágenes below-the-fold a menudo reduce el peso de página en 50% o más.

Debería usar un CDN para assets estáticos?

Sí. Un CDN reduce la latencia sirviendo assets desde ubicaciones edge cercanas a tus usuarios. También descarga tráfico de tu servidor origen y provee compresión y HTTP/2 integrados.

Cómo mejoro Core Web Vitals rápidamente?

Para LCP: optimiza tu elemento de contenido más grande (usualmente una imagen hero). Para CLS: siempre establece width/height en imágenes e iframes. Para INP: divide tareas largas de JavaScript y diferir scripts no críticos.