Saltar al contenido

El modelo mental completo: cuándo Astro no es la respuesta

La síntesis de cuarenta niveles en una sola apuesta y un solo eje: Astro envía HTML y añade interactividad por excepción, y todo lo aprendido cuelga de ahí. El modelo mental entero, los tres síntomas honestos de que tu producto no encaja, y una comparación sin caricaturas con Next, Remix y SvelteKit para elegir por adecuación y no por moda.

El modelo entero, en una frase

Todo lo que has aprendido cuelga de una sola idea: Astro envía HTML y se hidrata por excepción. El resto es consecuencia. El renderizado es un dial con cuatro posiciones que ya recorriste: estático en el build sin servidor, bajo demanda en cada petición con un adapter, la página estática con un trozo dinámico resuelto aparte —la server island—, y la interactividad puntual que se hidrata en el cliente. Un solo componente puede tocar las cuatro.

ASTRO
---// El dial de render, por paginaexport const prerender = true;   // SSG: horneado en el build, sin servidor// export const prerender = false; // SSR: bajo demanda, con adapter---<Precio server:defer>            <!-- server island: fragmento dinamico -->  <span slot="fallback">Cargando...</span></Precio><Contador client:visible />      <!-- client island: interactividad puntual -->

Y esa elección por página descansa sobre una posición por defecto de todo el proyecto: un dial global que solo fija el punto de partida, no un candado.

JS
// astro.config.mjsexport default defineConfig({ output: 'static' }); // el punto de partida; o 'server'

Verlo así reordena el temario en una jerarquía limpia. No memorizaste treinta funciones sueltas: aprendiste una postura —enviar lo mínimo— y sus derivaciones. El client:visible no es un truco, es la postura aplicada a la hidratación; la server island no es una API más, es la postura aplicada al dato fresco; el middleware no es fontanería, es la postura aplicada a lo que es cierto para toda petición.

El temario entero, colgado del eje

Los cuarenta niveles previos se ordenan sobre este mismo eje. Los fundamentos —el componente .astro, el templating, los layouts, el routing— te dieron la materia con la que se hornea el extremo estático. El bloque de contenido —colecciones, Content Layer, Markdown y MDX— es la fuente que llena ese extremo de datos tipados. La interactividad —islas y directivas de cliente— es el extremo opuesto, la excepción que se declara con cuidado.

Y el bloque de servidor —endpoints, middleware, actions, sesiones, adapters— es la maquinaria del extremo dinámico, que Astro añadió sin traicionar su tesis. La producción —imágenes, fuentes, i18n, SEO, seguridad— es el pulido que hace presentable todo lo anterior. Si tuvieras que explicarle Astro a alguien en una servilleta, dibujarías esta recta y colocarías cada tema en su punto exacto.

Cuándo Astro NO es la elección correcta

La señal de madurez no es defender a Astro, sino saber descartarlo. Hay tres síntomas honestos, y basta uno claro para reconsiderar.

Uno: estado compartido entre rutas que debe sobrevivir a la navegación sin recargar. Un editor, una herramienta de diseño, un terminal de trading: ahí la aplicación es el estado, y un router de cliente no es un lujo sino el sustrato. Las View Transitions suavizan un MPA, pero no te dan un almacén en memoria que persista intacto al cambiar de ruta. Si tu producto vive de eso, nadas contra la corriente del framework.

Dos: la página no significa nada sin JavaScript. Aplica el test del JS desactivado. Si tu producto es un lienzo, un mapa interactivo, una pizarra en tiempo real, apagar el JavaScript no deja un documento degradado: deja la nada, porque nunca hubo documento, solo aplicación. El cero-JS por defecto de Astro se convierte en cero-producto.

Tres: la gravedad del equipo y del ecosistema. Tu librería de componentes, tus futuras contrataciones y tu memoria muscular tienen forma de aplicación React. Pelear contra el grano MPA para reutilizar un sistema de diseño app-first puede costar más de lo que ahorra el JavaScript que evitas.

El test decisivo, en un gesto

Cuando dudes, hay una prueba mental rápida y sorprendentemente fiable: imagina tu producto con el JavaScript desactivado. Si sigue siendo útil —se lee, se navega, se indexa, se compra—, es contenido, y Astro encaja de forma natural porque su base es justo ese documento que sobrevive. Si se queda en una pantalla en blanco porque todo dependía del cliente, es una aplicación, y un meta-framework te servirá mejor sin que tengas que pelear contra la herramienta. Los tres síntomas anteriores son variaciones de esta única pregunta: ¿hay un documento debajo, o solo había una app disfrazada de página?

Comparación honesta: Next, Remix, SvelteKit

Ninguno de estos frameworks es peor que Astro; optimizan lo contrario. Conviene mirarlos sin bandos.

La simetría es exacta y por eso es honesta: la debilidad de Astro es justo la fuerza de ellos —una aplicación rica, con estado y router de cliente— y la debilidad de ellos es justo la fuerza de Astro —cien páginas de contenido que envían cero JavaScript—. Ningún framework gana los dos extremos porque optimizan valores por defecto opuestos. Elegir es decidir en qué extremo pasarás la mayor parte de tu tiempo.

En qué convergen todos

Conviene no exagerar la distancia: en muchas cosas Astro y los meta-frameworks se parecen tanto que los patrones se transfieren casi sin fricción de uno a otro.

La diferencia rara vez está en lo que puedes hacer —casi todo es posible en todos— sino en lo que cada uno hace fácil y por defecto. Y ese por defecto es justo lo que más moldea un proyecto a lo largo de los meses, porque es la dirección hacia la que la herramienta te empuja cuando dejas de pensar.

Esa convergencia tiene, además, una cara muy concreta que ningún meta-framework casado con una librería te ofrece: como Astro es agnóstico, puedes mezclar frameworks como islas independientes en un mismo documento, cada uno en su ecosistema.

ASTRO
---import CardReact from '../components/CardReact.jsx';import GraficoVue from '../components/GraficoVue.vue';---<!-- Dos ecosistemas conviviendo como islas en una misma pagina --><CardReact client:visible /><GraficoVue client:idle />

Pero esa libertad tiene su precio, y nombrarlo es parte de la honestidad: cada framework que hidratas arrastra su propio runtime, así que dos islas de React comparten motor mientras que una de React y otra de Vue cargan dos. El agnosticismo es una herramienta de migración gradual y de flexibilidad, no una invitación a apilar cinco frameworks en la portada sin pensarlo.