Daniel López Azaña

Tema

Social Media

Blog

GNU/Linux, Open Source, Cloud Computing, DevOps y más...

¿Qué es JAMstack? Arquitectura moderna para sitios web ultra-rápidos

JAMstack Architecture - JavaScript APIs Markup

El desarrollo web tradicional obliga a elegir entre velocidad de carga y funcionalidad dinámica, resultando en sitios lentos que frustran usuarios o en arquitecturas complejas difíciles de mantener. JAMstack (JavaScript, APIs y Markup) elimina este compromiso al pre-generar todo el contenido como archivos HTML estáticos durante el build, separando completamente frontend y backend. En mis 20+ años diseñando arquitecturas web, JAMstack representa la evolución más significativa en desarrollo de sitios modernos, permitiéndome entregar proyectos como la landing page de Option Panel en tiempo récord con rendimiento excepcional.

¿Qué significa JAMstack?

JAMstack es un acrónimo que describe tres componentes fundamentales de una arquitectura web moderna:

J
JavaScript
Interactividad y lógica dinámica ejecutada en el navegador del cliente sin depender del servidor.
A
APIs
Funcionalidad backend servida a través de APIs reutilizables y accesibles mediante HTTP/HTTPS desde JavaScript.
M
Markup
HTML estático pre-generado durante el build, servido directamente desde CDN sin procesamiento servidor.

La diferencia fundamental: En JAMstack, las páginas se generan una vez durante el build y se sirven como archivos estáticos, en lugar de generarse dinámicamente en cada petición como en arquitecturas tradicionales (WordPress, Django, Ruby on Rails).

Arquitectura JAMstack vs. arquitectura tradicional

La diferencia arquitectónica es radical y tiene implicaciones profundas en rendimiento, seguridad y escalabilidad:

Arquitectura tradicional (monolítica)

flowchart TB A[Navegador del usuario] -->|Petición HTTP| B[Servidor web] B -->|Consulta| C[Base de datos] C -->|Datos| B B -->|Procesamiento| D[Generación HTML] D -->|Renderizado| E[Respuesta HTML] E -->|Respuesta lenta| A style A fill:#e3f2fd style B fill:#ffebee style C fill:#fff3e0 style D fill:#ffebee style E fill:#ffebee style A stroke:#1976d2 style B stroke:#c62828 style C stroke:#ef6c00 style D stroke:#c62828 style E stroke:#c62828
⏱️ Procesamiento en cada petición
  • ❌ Servidor procesa cada visita individualmente.
  • ❌ Consultas a base de datos en tiempo real.
  • ❌ Latencia acumulada de múltiples componentes.
  • ❌ Servidor sobrecargado con alto tráfico.
  • ❌ Mayor superficie de ataque para hackers.

Arquitectura JAMstack (moderna)

flowchart TB A[Navegador del usuario] -->|Petición HTTP| B[CDN global] B -->|HTML estático| A A -->|JavaScript| C[Interacción cliente] C -->|API call| D[APIs serverless] D -->|JSON| C E[Build time] -.->|Pre-genera| B F[CMS headless] -.->|Contenido| E style A fill:#e8f5e9 style B fill:#c8e6c9 style C fill:#a5d6a7 style D fill:#81c784 style E fill:#dcedc8 style F fill:#f0f4c3 style A stroke:#2e7d32 style B stroke:#388e3c style C stroke:#43a047 style D stroke:#4caf50 style E stroke:#689f38 style F stroke:#9e9d24
⚡ Servido instantáneamente desde CDN
  • ✅ HTML pre-generado durante el build.
  • ✅ Servido desde edge locations globales.
  • ✅ Sin procesamiento servidor en cada visita.
  • ✅ Escalabilidad automática e ilimitada.
  • ✅ Superficie de ataque mínima (solo archivos estáticos).

Ventajas de JAMstack sobre arquitecturas tradicionales

Después de implementar decenas de proyectos JAMstack para clientes enterprise durante los últimos años, estas son las ventajas más impactantes que he experimentado:

1. Rendimiento excepcional

El factor diferenciador más evidente: Los sitios JAMstack son dramáticamente más rápidos que las arquitecturas tradicionales.

Por qué:

  • HTML pre-generado - No hay tiempo de procesamiento servidor en cada visita.
  • Servido desde CDN - El contenido se entrega desde el edge location más cercano al usuario.
  • Sin consultas a base de datos - Toda la lógica de datos se resuelve durante el build.
  • Caché agresivo - Los archivos estáticos se cachean indefinidamente.
  • Mínimo JavaScript - Solo el código esencial se envía al cliente.

Impacto real:

  • Tiempos de carga sub-segundo - La mayoría de páginas cargan en menos de 1 segundo.
  • Métricas Core Web Vitals perfectas - LCP < 1s, FID < 10ms, CLS < 0.05.
  • Experiencia fluida - Sin esperas perceptibles entre navegación de páginas.

En el proyecto de landing page de Option Panel, logramos tiempos de carga casi instantáneos que rivalizan con aplicaciones nativas.

2. Seguridad mejorada drásticamente

Superficie de ataque mínima: Sin servidor dinámico, sin base de datos accesible, sin plugins vulnerables.

Protección inherente:

  • No hay código servidor ejecutable - Los atacantes solo encuentran archivos HTML estáticos.
  • Sin base de datos expuesta - No hay SQL injection, no hay ataques a la base de datos.
  • Sin plugins vulnerables - A diferencia de WordPress con cientos de plugins de seguridad dudosa.
  • Sin sesiones de usuario en servidor - Las sesiones se manejan client-side o via APIs externas.
  • Ataques DDoS mitigados automáticamente - Los CDNs modernos absorben y filtran tráfico malicioso.

Comparación con WordPress:

WordPress requiere actualizaciones constantes de seguridad para core, themes y plugins. Una vulnerabilidad en cualquier plugin puede comprometer todo el sitio. JAMstack elimina esta preocupación completamente al no tener código ejecutable en el servidor web.

3. Escalabilidad ilimitada con costes mínimos

Escalado automático sin intervención: Los CDNs manejan millones de visitas simultáneas sin configuración adicional.

Ventajas de escalabilidad:

  • Sin límites de tráfico - El CDN distribuye la carga automáticamente.
  • Sin servidores que escalar - No necesitas aumentar capacidad servidor para picos de tráfico.
  • Costes predecibles - El coste es principalmente por ancho de banda CDN, no por servidor.
  • Resistencia a picos virales - Si tu sitio se vuelve viral, el CDN lo maneja sin problemas.

Comparación de costes:

AspectoWordPress/CMS tradicionalJAMstack
Hosting + BD██████░░░░ Moderado
(Shared/VPS, BD incluida)
██░░░░░░░░ Muy bajo
(Planes gratuitos generosos)
Mantenimiento██████░░░░ Continuo
(Actualizaciones, seguridad, plugins)
██░░░░░░░░ Mínimo
(Rebuild automático)
Coste al escalar██████████ Crece significativamente
(CPU, RAM, más servidores)
████░░░░░░ Crece linealmente
(Solo ancho de banda CDN)

Nota importante: Los indicadores visuales (█) muestran costes, no capacidad de escalabilidad. JAMstack escala mejor que WordPress (maneja más tráfico con menos recursos). Para sitios pequeños/moderados, ambas opciones son económicas. La diferencia clave: con alto tráfico, WordPress requiere más recursos servidor (CPU, RAM, servidores adicionales) con costes crecientes no lineales, mientras JAMstack solo paga ancho de banda CDN de forma lineal y predecible. Ambos costes aumentan con tráfico, pero JAMstack es más eficiente y económico a escala.

4. Mejor experiencia de desarrollo

Desarrollo más rápido y placentero: Los generadores de sitios estáticos modernos ofrecen DX (Developer Experience) superior.

Beneficios para desarrolladores:

  • Hot reload instantáneo - Los cambios se reflejan inmediatamente durante desarrollo.
  • Control total del código - No estás limitado por restricciones de CMS.
  • Herramientas modernas - Frameworks como Astro, Next.js, Gatsby con tooling excelente.
  • Git workflow natural - Todo el sitio vive en control de versiones.
  • Deployments automáticos - Push a main branch y el sitio se regenera automáticamente.
  • Preview deployments - Cada pull request genera un preview del sitio automáticamente.

Ejemplo de workflow:

# 1. Desarrollo local con hot reload
npm run dev

# 2. Commit y push a Git
git add .
git commit -m "Add new blog post about JAMstack"
git push origin main

# 3. Deploy automático
# El servicio de hosting (Netlify, Vercel, Cloudflare Pages) detecta el push,
# ejecuta el build automáticamente y despliega la nueva versión en segundos.

5. SEO excepcional

HTML estático perfectamente indexable: Los motores de búsqueda aman los sitios JAMstack.

Ventajas SEO:

  • HTML completo en primera carga - No hay JavaScript que bloquee el renderizado inicial.
  • Velocidad de carga perfecta - Google prioriza sitios rápidos en rankings.
  • Core Web Vitals óptimos - Métricas perfectas impactan positivamente en SEO.
  • Sin problemas de indexación - Todo el contenido está en HTML estático.
  • Estructura de URLs limpia - Fácil de configurar URLs SEO-friendly.

En comparación con SPAs (Single Page Applications) que dependen de JavaScript para renderizar contenido, JAMstack proporciona HTML completo inmediatamente, facilitando la indexación de motores de búsqueda.

Herramientas populares del ecosistema JAMstack

El ecosistema JAMstack ha madurado dramáticamente, con herramientas enterprise-ready para cada componente:

Generadores de sitios estáticos (SSG)

Astro ⭐ Mi favorito personal

  • Filosofía: “Island Architecture” - JavaScript solo donde es necesario.
  • Ventaja única: Soporte para componentes de cualquier framework (React, Vue, Svelte, etc.).
  • Rendimiento: El mejor del mercado - genera HTML puro sin JavaScript innecesario.
  • Ideal para: Landing pages, blogs, documentación, portafolios.
  • Mi experiencia: Utilizado en www.daniloaz.com y múltiples proyectos cliente con resultados excepcionales.

Next.js

  • Empresa: Vercel
  • Ventaja: SSG + SSR híbrido + API routes integradas.
  • Ecosistema: Enorme comunidad React.
  • Ideal para: Aplicaciones complejas con necesidades mixtas de contenido estático y dinámico.

Gatsby

  • Ventaja: GraphQL integrado para consulta de datos.
  • Plugins: Ecosistema masivo de plugins para cualquier fuente de datos.
  • Ideal para: Sitios complejos con múltiples fuentes de contenido.

Hugo

  • Lenguaje: Go
  • Ventaja: Velocidad de build extremadamente rápida.
  • Ideal para: Sitios con miles de páginas que necesitan builds ultra-rápidos.

Eleventy (11ty)

  • Ventaja: Simplicidad y flexibilidad de templating.
  • Sin framework - HTML puro con cualquier lenguaje de plantillas.
  • Ideal para: Desarrolladores que prefieren simplicidad sobre abstracciones.

CMS headless (gestión de contenido)

Directus

  • Tipo: Open-source, self-hosted o cloud.
  • Ventaja: API automática REST y GraphQL sobre cualquier base de datos SQL.
  • Ideal para: Proyectos que necesitan control total del backend.
  • Mi experiencia: Utilizado en Option Panel landing page para gestión de leads.

Contentful

  • Tipo: SaaS premium.
  • Ventaja: Interfaz intuitiva, APIs robustas, escalabilidad enterprise.
  • Ideal para: Equipos de contenido no técnicos.

Strapi

  • Tipo: Open-source, JavaScript/Node.js.
  • Ventaja: Customizable, auto-hosted, API automática.
  • Ideal para: Equipos con experiencia en JavaScript.

Sanity

  • Tipo: SaaS con editor en tiempo real.
  • Ventaja: Structured content, tiempo real, queries potentes.
  • Ideal para: Contenido complejo con múltiples relaciones.

Hosting y deployment

Vercel

  • Especialización: Next.js (aunque soporta cualquier framework).
  • Ventaja: Deployments instantáneos, preview automático de PRs, analytics integrados.
  • CDN: Global automático.
  • Precio: Generoso free tier, pricing escalable.

Netlify

  • Especialización: Plataforma todo-en-uno para JAMstack.
  • Ventaja: Funciones serverless, forms integrados, split testing.
  • CDN: Edge network global.
  • Precio: Free tier generoso, planes pro asequibles.

Cloudflare Pages

  • Especialización: Integración con ecosistema Cloudflare.
  • Ventaja: CDN más rápido del mundo, Workers integrados, bandwidth ilimitado.
  • Precio: Free tier extremadamente generoso.

AWS Amplify

  • Especialización: Integración con AWS.
  • Ventaja: Acceso completo a servicios AWS, CI/CD integrado.
  • Ideal para: Proyectos ya en AWS que necesitan integración profunda.

¿Cuándo usar JAMstack?

JAMstack no es adecuado para todos los proyectos. Aquí mi criterio basado en experiencia real:

✅ Casos de uso ideales para JAMstack

Landing pages y sitios corporativos:

  • Contenido mayormente estático que cambia ocasionalmente.
  • Prioridad máxima en velocidad de carga y conversión.
  • Necesidad de costes de hosting mínimos.
  • Ejemplo: Option Panel landing page desarrollada en 1 semana con rendimiento excepcional.

Blogs y sitios de contenido:

  • Publicación regular de artículos o documentación.
  • SEO crítico para tráfico orgánico.
  • Múltiples autores o flujos de aprobación de contenido.
  • Ejemplo: Este mismo blog en daniloaz.com/blog.

Documentación técnica:

  • Documentación de productos, APIs, o proyectos open source.
  • Búsqueda full-text y navegación clara.
  • Versioning de documentación.

E-commerce pequeño/mediano:

  • Catálogo de productos con inventory management via API.
  • Checkout manejado por servicios especializados (Stripe, Shopify Buy Button).
  • Prioridad en velocidad de carga para conversión.

Portfolios y sitios personales:

  • Showcase de proyectos y experiencia profesional.
  • Bajo mantenimiento y costes mínimos.
  • Máximo control sobre diseño y código.

❌ Casos donde JAMstack NO es la mejor opción

Aplicaciones web altamente dinámicas:

  • Dashboards con datos en tiempo real de múltiples usuarios.
  • Aplicaciones colaborativas estilo Google Docs.
  • Plataformas sociales con feeds personalizados.

Sitios con contenido que cambia constantemente:

  • Portales de noticias con docenas de artículos nuevos por hora.
  • Sitios de clasificados con miles de nuevos listings diarios.
  • Cualquier sitio donde el contenido cambia más rápido de lo que puedes hacer rebuild.

E-commerce enterprise con miles de productos:

  • Catálogos masivos con decenas de miles de SKUs.
  • Inventory management complejo en tiempo real.
  • Personalizaciones dinámicas basadas en comportamiento de usuario.

Nota: Aunque existen soluciones híbridas (Incremental Static Regeneration en Next.js) que mitigan algunas limitaciones.

Cómo empezar con JAMstack

Si quieres comenzar a desarrollar sitios JAMstack, este es mi roadmap recomendado basado en cómo enseñaría a un desarrollador tradicional:

1. Elige un generador de sitios estáticos

Para comenzar, recomiendo Astro:

  • Curva de aprendizaje suave.
  • Documentación excepcional.
  • Rendimiento out-of-the-box sin optimización compleja.
  • Soporte para componentes de múltiples frameworks.

Instalación rápida:

# Crear nuevo proyecto Astro
npm create astro@latest

# Navegar al proyecto y ejecutar dev server
cd mi-proyecto-jamstack
npm run dev

En minutos tendrás un sitio funcionando en http://localhost:4321 con hot reload.

2. Comprende la separación entre build time y runtime

Concepto fundamental:

  • Build time: Cuando ejecutas npm run build y generas los archivos HTML estáticos.
  • Runtime: Cuando el usuario visita tu sitio y el navegador descarga el HTML.

En build time puedes:

  • Consultar bases de datos.
  • Llamar a APIs externas.
  • Procesar Markdown, imágenes, assets.
  • Generar páginas dinámicamente basadas en datos.

En runtime (navegador):

  • Solo tienes HTML estático + CSS + JavaScript mínimo.
  • Interacciones del usuario manejan via JavaScript.
  • Datos dinámicos se obtienen via APIs client-side.

3. Integra un CMS headless (opcional)

Si necesitas que clientes o editores no técnicos gestionen contenido:

Opción simple: Markdown + Git

  • Contenido en archivos .md en tu repositorio.
  • Editores commit cambios a Git (o usan interfaces como NetlifyCMS).
  • Rebuild automático en cada push.

Opción avanzada: CMS headless

  • Directus, Contentful, Strapi para gestión visual de contenido.
  • API para obtener contenido durante build time.
  • Webhooks disparan rebuild automático al publicar cambios.

4. Despliega en plataforma JAMstack

Despliegue en Netlify (opción más simple):

  1. Push tu proyecto a GitHub/GitLab.
  2. Conecta el repositorio en Netlify.
  3. Netlify detecta el framework automáticamente.
  4. Configura el comando de build (npm run build) y directorio de output (dist).
  5. Deploy automático - tu sitio estará live en minutos.

Configuración continua:

  • Cada push a main branch despliega automáticamente.
  • Pull requests generan preview deployments.
  • Rollback a versiones anteriores con un click.

5. Añade funcionalidad dinámica via APIs

Para formularios de contacto:

  • Netlify Forms - Solución integrada gratuita.
  • Formspree - Servicio especializado en formularios.
  • Custom API - Tu propia API serverless (AWS Lambda, Netlify Functions).

Para autenticación:

  • Auth0 - Solución completa de autenticación.
  • Supabase Auth - Open-source, incluye base de datos.
  • AWS Cognito - Si tu infraestructura está en AWS.

Para búsqueda:

  • Algolia - Búsqueda ultra-rápida, free tier generoso.
  • Meilisearch - Open-source, self-hosted.
  • Simple client-side search - Para sitios pequeños, búsqueda en JSON.

Ejemplo práctico: landing page con Astro

Aquí un ejemplo simplificado de cómo estructurar una landing page JAMstack profesional:

Estructura del proyecto:

mi-landing/
├── src/
│   ├── pages/
│   │   └── index.astro          # Homepage
│   ├── components/
│   │   ├── Hero.astro            # Hero section
│   │   ├── Features.astro        # Features section
│   │   └── ContactForm.astro     # Contact form
│   ├── layouts/
│   │   └── Layout.astro          # Layout base
│   └── styles/
│       └── global.css            # Estilos globales
├── public/
│   └── images/                   # Imágenes estáticas
├── astro.config.mjs              # Configuración Astro
└── package.json

Ejemplo de página con datos desde CMS:

---
// src/pages/index.astro
import Layout from '../layouts/Layout.astro';
import Hero from '../components/Hero.astro';
import Features from '../components/Features.astro';

// Obtener datos del CMS durante build time
const response = await fetch('https://tu-cms.com/api/landing-page');
const pageData = await response.json();
---

<Layout title={pageData.title} description={pageData.description}>
  <Hero 
    title={pageData.hero.title} 
    subtitle={pageData.hero.subtitle}
    ctaText={pageData.hero.ctaText}
    ctaUrl={pageData.hero.ctaUrl}
  />
  
  <Features features={pageData.features} />
  
  <!-- Más secciones... -->
</Layout>

Este código se ejecuta una vez durante el build, genera HTML estático con todos los datos, y el resultado se sirve instantáneamente desde CDN.

Conclusión

JAMstack representa la evolución natural del desarrollo web moderno, combinando lo mejor de arquitecturas estáticas (velocidad, seguridad, simplicidad) con capacidades dinámicas (APIs, JavaScript) cuando las necesitas.

Ventajas fundamentales:

  • Rendimiento excepcional - Tiempos de carga sub-segundo.
  • Seguridad mejorada - Superficie de ataque mínima.
  • Escalabilidad automática - Sin límites de tráfico.
  • Costes mínimos - 10-20x más económico que hosting tradicional.
  • Mejor experiencia de desarrollo - Herramientas modernas y workflow eficiente.

En mis 20+ años desarrollando arquitecturas web, JAMstack es la aproximación más efectiva que he utilizado para la mayoría de sitios corporativos, landing pages y blogs. Proyectos como la landing page de Option Panel demuestran que puedes entregar soluciones enterprise en tiempo récord sin comprometer calidad.

Si estás considerando JAMstack para tu próximo proyecto, mi recomendación es clara: comienza con Astro, despliega en Netlify o Vercel, y experimenta la diferencia de rendimiento y simplicidad.


¿Necesitas un sitio JAMstack profesional?

Si buscas desarrollar una landing page, sitio corporativo o blog de alto rendimiento aprovechando las ventajas de JAMstack, puedo ayudarte a diseñar y desarrollar una solución optimizada que maximice velocidad, conversión y mantenibilidad.

Mis servicios incluyen:

  • Arquitectura y desarrollo JAMstack con Astro, Next.js o Gatsby.
  • Integración con CMS headless (Directus, Contentful, Strapi).
  • Optimización de rendimiento y Core Web Vitals.
  • SEO técnico y configuración de analytics.
  • Deployment y CI/CD en plataformas modernas.

Estoy disponible 20 horas/semana para proyectos remotos.

Ponte en contacto

JAMstack Astro Arquitectura web Sitios estáticos Performance CDN Desarrollo moderno
Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Artículos relacionados

terraform-and-route53-logos

Cómo importar rápidamente todos los registros de una zona DNS de Route53 en Terraform

El comando terraform import nos permite importar en HashiCorp Terraform recursos que ya existían previamente en el proveedor con el que estemos trabajando, es este caso AWS. Sin embargo, sólo permite importar dichos registros uno por uno, con una ejecución de terraform import cada vez. Esto, aparte de ser tremendamente tedioso, en algunas situaciones se vuelve directamente impracticable. Este es el caso de los registros de una zona DNS de Route53. La tarea puede resultar inabarcable si tenemos varias zonas DNS, y cada una tiene decenas o cientos de registros. En este artículo te ofrezco un script en bash que te permitirá importar en Terraform todos los registros de una zona DNS de Route53 en cuestión de segundos o de pocos minutos.

8 de febrero de 2022
Script para cambiar automáticamente todos los volúmenes gp2 a gp3 con aws-cli

Script para cambiar automáticamente todos los volúmenes gp2 a gp3 con aws-cli

El pasado diciembre Amazon anunció sus nuevos volúmenes EBS gp3, los cuales ofrecen mejores prestaciones y un ahorro en el coste del 20% respecto a los que se venían utilizando hasta ahora, los gp2. Pues bien, tras probar satisfactoriamente estos nuevos volúmenes en varios clientes, no puedo hacer otra cosa más que recomendar su utilización, pues son todo ventajas y en estos 2 meses y medio que han transcurrido desde el anuncio no he apreciado ningún problema ni efecto secundario.

16 de febrero de 2021
AWS security groups

Cómo actualizar automáticamente todos nuestros grupos de seguridad EC2 de AWS cuando nuestra IP dinámica cambia

Uno de los mayores fastidios cuando trabajamos con AWS y nuestra conexión a Internet tiene IP dinámica es que cuándo ésta cambia, automáticamente dejamos de tener acceso a todos los servidores y servicios que habíamos protegido mediante un grupo de seguridad EC2 cuyas reglas sólo permiten el tráfico a ciertas IP’s específicas en lugar de abrir las conexiones a todo el mundo (0.0.0.0/0).Ciertamente lo más sencillo es siempre indicar en el grupo de seguridad que permitimos el tráfico en un puerto a todo el mundo, de modo que aunque tengamos IP dinámica en nuestra conexión a Internet siempre podremos continuar accediendo aunque ésta cambie. Pero abrir el tráfico a un puerto a todo el mundo no es la forma correcta de proceder desde el punto de vista de la seguridad, pues entonces cualquier atacante podrá tener acceso a ese puerto sin restricciones, y eso no es lo que queremos.

12 de enero de 2021

Comentarios

Sé el primero en comentar

Enviar comentario