¿Qué es una single-page application (SPA)?

  • vuetelemetry
  • Guías
  • 6 min de lectura

Una single-page application se carga una vez y luego reescribe la página en el navegador según navegas. Aquí tienes qué significa eso, por qué se hizo popular, y las concesiones que conviene conocer.

Una single-page application, o SPA, es un sitio web que carga un único documento HTML una sola vez y luego actualiza el contenido en el navegador según interactúas, en lugar de pedir una página completamente nueva al servidor en cada clic. La «página única» es literal: el navegador nunca hace una recarga completa en uso normal. Todo, después de esa primera carga, lo gestiona JavaScript reescribiendo la página actual.

De los sitios multipágina a la página única

Código fuente de framework JavaScript con funciones de scope y de controlador, mostrado en una pantalla.
Código fuente de framework JavaScript con funciones de scope y de controlador, mostrado en una pantalla.

Para apreciar por qué existen las SPA, ayuda recordar el modelo tradicional al que reaccionaron. En un sitio multipágina clásico, cada enlace o envío de formulario pide al servidor un documento HTML completamente nuevo, que el navegador carga desde cero — cabecera, pie y todo. Es simple y robusto, pero cada navegación implica una recarga visible y un viaje de ida y vuelta al servidor, lo que puede sentirse lento e inconexo.

Una SPA da la vuelta a esto. El servidor envía una cáscara HTML y un bundle de JavaScript en la primera visita; a partir de ahí, navegar a una nueva «página» ejecuta código en el navegador que intercambia la parte relevante de la interfaz y solo trae los datos que necesita, normalmente como JSON desde una API. Como no hay recarga completa, las transiciones pueden ser instantáneas y la experiencia se acerca a la de una app de escritorio o móvil.

Los frameworks y el atractivo de las SPA

Este es precisamente el terreno de los frameworks front-end. React, Vue, Svelte y Angular existen en gran parte para hacer manejable la construcción de SPA, aportando los componentes, la gestión de estado y el enrutado en el cliente que cambian de vista sin recargar. Cuando oyes que un sitio está «hecho con React» o «hecho con Vue», muy a menudo es una SPA — el framework es lo que hace práctico construir y mantener el modelo de página única.

  • SPA: carga una cáscara HTML, luego actualiza el contenido en el navegador vía JS
  • Construida con frameworks como React, Vue, Svelte o Angular
  • Pros: navegación rápida, tipo app, tras la primera carga
  • Contras: primera carga más pesada; cuidado con SEO, accesibilidad, enrutado
  • El SSR (Next.js, Nuxt) ofrece un primer pintado rápido más la navegación SPA

El atractivo es una experiencia realmente más fluida. Una vez cargado el bundle inicial, las interacciones son rápidas porque la app solo pide datos en vez de documentos enteros, y la interfaz puede actualizarse con fluidez sin el parpadeo de una recarga. Para productos muy interactivos — paneles, editores, aplicaciones web que se comportan como software — esta capacidad de respuesta es una ventaja real y duradera frente al modelo multipágina.

Las concesiones, sin rodeos

Pero el modelo SPA conlleva concesiones honestas que hay que diseñar, no ignorar. La primera carga es más pesada, porque el navegador debe descargar y ejecutar un bundle de JavaScript antes de mostrar contenido útil, lo que puede perjudicar la experiencia en conexiones lentas o dispositivos modestos. Si ese bundle crece sin control, la propia rapidez que prometía la SPA puede convertirse en una pantalla inicial lenta y en blanco.

La búsqueda y la accesibilidad merecen un cuidado particular. Como gran parte del contenido se renderiza con JavaScript tras la carga, los motores de búsqueda y las herramientas que no ejecutan scripts pueden ver solo una cáscara vacía, salvo que tomes medidas deliberadas. El enrutado en el cliente también debe implementarse con cuidado para que el botón «atrás» del navegador, los enlaces profundos y el historial se comporten como los usuarios esperan, en lugar de romperse de formas sutiles.

El renderizado en servidor al rescate

La respuesta del sector a estas concesiones es el renderizado en servidor y sus parientes. Meta-frameworks como Next.js para React y Nuxt para Vue renderizan la página inicial en el servidor para que el usuario — y los motores de búsqueda — reciban contenido real de inmediato, y luego la «hidratan» en una SPA completa en el navegador. Este híbrido mantiene el primer pintado rápido de los sitios tradicionales y la navegación fluida de una SPA, y por eso tantas apps modernas lo adoptan.

La respuesta del sector a estas concesiones es el renderizado en servidor y sus parientes. Meta-frameworks como Next.js para React y Nuxt para Vue renderizan la página inicial en el servidor para que el usuario — y los motores de búsqueda — reciban contenido real de inmediato, y luego la «hidratan» en una SPA completa en el navegador. Este híbrido mantiene el primer pintado rápido de los sitios tradicionales y la navegación fluida de una SPA, y por eso tantas apps modernas lo adoptan.

— vuetelemetry

Elegir la SPA con conocimiento de causa

Nada de esto hace a la SPA universalmente buena o mala. Un sitio de contenido hecho sobre todo de artículos puede estar mejor servido por un enfoque tradicional o estático, mientras que una aplicación ricamente interactiva se beneficia enormemente del modelo SPA. La habilidad está en elegir de forma deliberada, sabiendo que la «página única» te compra interactividad fluida a cambio de una primera carga más pesada y de más responsabilidad sobre la búsqueda y la accesibilidad.

Entendida así, la single-page application no es una palabra de moda sino una elección arquitectónica concreta con fortalezas y costes claros. Carga una vez, funciona en el navegador y se siente como una app — y cuando la combinas con renderizado en servidor, puedes tener gran parte de ese beneficio sin pagar el precio completo. Conocer las concesiones es lo que te permite recurrir a ella en el momento adecuado.

Stack relacionado