Skip to content

06. Integración con Frameworks

6.1 Cómo usar React, Vue y Svelte dentro de Astro

Section titled “6.1 Cómo usar React, Vue y Svelte dentro de Astro”

Astro permite integrar múltiples frameworks de JavaScript (React, Vue, Svelte, etc.) en un mismo proyecto mediante su sistema de integraciones oficiales.

  • Reutilizar componentes existentes de otros frameworks
  • Aprovechar ecosistemas maduros (React, Vue, Svelte)
  • Migrar gradualmente proyectos existentes
  • Combinar lo mejor de cada framework en un solo proyecto
  1. Instalación de Integraciones: Se instalan mediante CLI o manualmente
  2. Configuración: Se registran en astro.config.mjs
  3. Uso: Se importan y usan como componentes Astro normales
  4. Hidratación Selectiva: Se controla cuándo el JavaScript se ejecuta en el cliente

React

Terminal window
npx astro add react

Vue

Terminal window
npx astro add vue

Svelte

Terminal window
npx astro add svelte
FrameworkVentajasCasos de Uso
ReactEcosistema grande, JSXApps complejas, reutilización
VueSintaxis simple, reactivoFormularios, UI interactiva
SvelteSin virtual DOM, rápidoComponentes ligeros
  • Flexibilidad: Usa el framework que prefieras
  • Rendimiento: Solo carga JavaScript cuando es necesario
  • Compatibilidad: Funciona con componentes existentes
  • Migración: Facilita transición de otros frameworks

6.2 Componentes híbridos e islas interactivas

Section titled “6.2 Componentes híbridos e islas interactivas”

Arquitectura de Islas (Islands Architecture)

Section titled “Arquitectura de Islas (Islands Architecture)”

La Arquitectura de Islas es el patrón fundamental de Astro que permite crear páginas con “islas” de interactividad en un océano de HTML estático.

  • Isla: Componente interactivo aislado con JavaScript
  • Océano: HTML estático sin JavaScript
  • Hidratación Parcial: Solo las islas se hidratan con JavaScript
  • Minimizar JavaScript enviado al cliente
  • Mejorar rendimiento y tiempo de carga
  • Mantener interactividad donde se necesita
  • Reducir complejidad del cliente
  1. Renderizado en Servidor: Todo se renderiza como HTML estático
  2. Identificación de Islas: Se marcan componentes interactivos
  3. Hidratación Selectiva: Solo las islas reciben JavaScript
  4. Aislamiento: Cada isla funciona independientemente

Componentes híbridos combinan partes estáticas (Astro) con partes interactivas (React/Vue/Svelte):

  • Parte estática: Renderizada en servidor, sin JavaScript
  • Parte interactiva: Hidratada en cliente, con JavaScript
  • Comunicación: Props para pasar datos entre partes

Astro proporciona directivas para controlar la hidratación:

DirectivaCuándo se HidrataUso Recomendado
client:loadInmediatamente al cargarComponentes críticos
client:idleCuando el navegador está inactivoComponentes secundarios
client:visibleCuando entra en viewportComponentes below-the-fold
client:mediaCuando media query coincideComponentes responsive
client:onlySolo en cliente, nunca en servidorComponentes con APIs del navegador
  • Rendimiento: Menos JavaScript = carga más rápida
  • SEO: HTML estático indexable
  • Escalabilidad: Añade interactividad gradualmente
  • Mantenibilidad: Componentes aislados y simples

6.3 Control de carga parcial y optimización

Section titled “6.3 Control de carga parcial y optimización”

El control de carga parcial permite decidir exactamente qué JavaScript se envía al cliente y cuándo se ejecuta, optimizando el rendimiento de la aplicación.

  • Reducir el tamaño del bundle JavaScript
  • Mejorar el tiempo de carga inicial (FCP, LCP)
  • Optimizar el uso de recursos del navegador
  • Mejorar métricas de rendimiento (Core Web Vitals)

1. Carga Inmediata (client:load)

  • JavaScript se carga y ejecuta inmediatamente
  • Uso: Componentes críticos para la primera interacción
  • Impacto: Mayor tamaño inicial, interactividad inmediata

2. Carga Diferida (client:idle)

  • JavaScript se carga cuando el navegador está inactivo
  • Uso: Componentes importantes pero no críticos
  • Impacto: No bloquea la carga inicial

3. Carga por Visibilidad (client:visible)

  • JavaScript se carga cuando el componente entra en viewport
  • Uso: Componentes below-the-fold
  • Impacto: Carga solo lo que el usuario ve

4. Carga Condicional (client:media)

  • JavaScript se carga según media query
  • Uso: Componentes específicos de dispositivo
  • Impacto: Carga solo en dispositivos específicos

5. Solo Cliente (client:only)

  • No se renderiza en servidor, solo en cliente
  • Uso: Componentes que usan APIs del navegador
  • Impacto: Sin SSR, solo CSR

Code Splitting

  • División automática del código en chunks
  • Carga solo el código necesario
  • Reduce el bundle inicial

Lazy Loading

  • Carga diferida de recursos
  • Imágenes, componentes, scripts
  • Mejora tiempo de carga inicial

Prefetching

  • Precarga de recursos que se usarán pronto
  • Mejora navegación entre páginas
  • Balance entre rendimiento y uso de red

Tree Shaking

  • Eliminación de código no usado
  • Reduce tamaño del bundle
  • Automático en Astro
MétricaDescripciónObjetivo
FCPFirst Contentful Paint< 1.8s
LCPLargest Contentful Paint< 2.5s
TTITime to Interactive< 3.8s
TBTTotal Blocking Time< 200ms
CLSCumulative Layout Shift< 0.1
  1. Prioriza contenido estático: Usa HTML estático siempre que sea posible
  2. Hidrata selectivamente: Solo componentes que requieren interactividad
  3. Usa directivas apropiadas: Elige la directiva según la prioridad
  4. Mide el rendimiento: Usa Lighthouse y Web Vitals
  5. Optimiza imágenes: Usa formatos modernos (WebP, AVIF)
  6. Minimiza JavaScript: Reduce dependencias innecesarias
🐝