Explorando Astro: creado para sitios web basados en contenido

3 min

1. ¿De verdad necesitamos tanto JavaScript?

Los frameworks frontend modernos como React, Vue y Svelte han mejorado enormemente la experiencia de desarrollo al crear aplicaciones web complejas. Pero cuando los usamos para crear blogs, portafolios, documentación o sitios de marketing, surge una pregunta: ¿de verdad necesitan estos sitios, centrados principalmente en presentar contenido, cargar toda la página como una aplicación de una sola página (SPA)?

La respuesta suele ser «no». En este tipo de sitios, la necesidad principal del usuario es acceder rápidamente al contenido. Un exceso de JavaScript, en cambio, retrasa el tiempo hasta la interactividad (TTI) y perjudica tanto la experiencia de usuario como el SEO.

Astro nació precisamente para resolver este problema.

2. La idea central de Astro: contenido primero y cero JS por defecto

Astro es un generador de sitios estáticos (SSG) moderno cuya idea central es priorizar el contenido. Su objetivo es realizar tanto trabajo como sea posible durante la compilación y enviar al navegador la menor cantidad posible de JavaScript.

Para lograrlo, Astro propuso dos grandes innovaciones:

  • Cero JavaScript por defecto (Zero-JS by Default): Astro renderiza durante la compilación todos tus componentes de interfaz, ya estén escritos en React, Vue o Svelte, como HTML puro. Así, el navegador recibe una página estática y no necesita cargar el runtime JS de ningún framework, por lo que la carga es extremadamente rápida.
  • Arquitectura de islas (Islands Architecture): Esta es la esencia de Astro. En un «océano» de HTML estático, cualquier componente que necesite interacción en el cliente puede marcarse como una «isla». Astro empaqueta y carga de forma independiente el JavaScript que necesitan esas islas, mientras el resto de la página permanece completamente estático.

3. ¿Cómo funcionan las «islas»?

En Astro puedes marcar un componente como una isla interactiva añadiendo una directiva client:*.

Por ejemplo, supongamos que tenemos un componente contador escrito en React llamado Counter.jsx. Podemos usarlo en una página de Astro de esta manera:

---
// src/pages/index.astro
import Counter from '../components/Counter.jsx';
---
<html>
  <body>
    <h1>Astro 示例</h1>
    <p>这是一个静态的段落,它不会加载任何 JS。</p>

    {/* 这个组件是一个交互式岛屿 */}
    <Counter client:load />

    <p>这是另一个静态段落。</p>
  </body>
</html>

La directiva client:load le indica a Astro:

  1. Renderizar en el servidor el HTML inicial del componente Counter.
  2. Crear un paquete JS independiente para el componente Counter.
  3. Cargar automáticamente ese paquete JS al cargar la página y «activar» (hydrate) el componente para que sea interactivo.

Astro también ofrece directivas de carga más precisas, como client:idle (cargar cuando el navegador esté inactivo) y client:visible (cargar cuando el componente entre en el viewport), llevando la optimización del rendimiento aún más lejos.

4. Independencia de frameworks

Otro gran atractivo de Astro es su apertura a los frameworks de interfaz. En un mismo proyecto de Astro puedes usar al mismo tiempo componentes de distintos frameworks como React, Vue, Svelte, SolidJS y Lit. Esto proporciona a los equipos una enorme flexibilidad para colaborar y elegir tecnologías.

Conclusión

Astro no pretende sustituir a React o Vue, sino ofrecer una solución mejor para escenarios concretos. Si tu proyecto es un sitio centrado en el contenido y con requisitos muy exigentes de rendimiento y SEO —por ejemplo, este mismo blog está creado con Astro—, Astro es sin duda una opción excelente que merece explorarse en profundidad. Combina a la perfección las ventajas de rendimiento de los sitios estáticos con la experiencia de desarrollo de los frameworks modernos.