Crea webs ultrarrápidas con Astro y Storyblok

Esta página también está disponible en: English

Tiempo de lectura: 13 mins

En el panorama digital actual, la web performance se ha convertido en un factor crítico para ofrecer excelentes experiencias de usuario. Los sitios web lentos pueden frustrar a los visitantes, generando tasas de rebote más altas y conversiones más bajas. Sin embargo, lograr una performance ultrarrápida sin comprometer las funcionalidades puede ser todo un reto.

Astro y Storyblok es una pareja ganadora que permite a los desarrolladores crear sitios web ultrarrápidos con una cantidad limitada de JavaScript. Al combinar las capacidades de generación de sitios estáticos de Astro con el CMS autónomo de Storyblok, los desarrolladores pueden aprovechar los beneficios del contenido renderizado previamente y reducir la ejecución de JavaScript del lado del cliente, lo que resulta en una velocidad óptima de la web. Este artículo profundiza en la perfecta integración de Astro y Storyblok, destacando los beneficios a nivel rendimiento web y la eficiencia que ofrece este enfoque para el desarrollo web moderno.

Astro

Astro es un framework open source código para crear sitios web rápidos y centrados en el contenido, ofreciendo una excelente developer experience.

Astro es:

Además, estas son algunas de las características clave de Astro:

Como ves, Astro es una excelente opción para crear web ultrarrápidas. Sin embargo, crear y administrar el contenido directamente desde Astro puede no ser la mejor experiencia para los editores de contenido.

Storyblok

Para solucionar esta limitación, puedes usar un headless CMS para que tus editores tengan una herramienta visual para crear y administrar el contenido de tu proyecto web. Y Storyblok es una excelente opción para hacerlo.

Tengo previsto escribir un artículo completo sobre Storyblok porque merece la pena profundizar en él y descubrir todas las características y funciones que puedes aprovechar para tu web.

Pero, por ahora, aquí tienes algunas de las características clave de Storyblok y por qué lo elijo como mi headless CMS favorito:

Show, don't tell

La teoría suena genial, ¿verdad? Pero veamos un ejemplo práctico paso a paso de cómo crear un proyecto básico utilizando Astro y Storyblok.

1. Crear un proyecto en Storyblok

Loguéate en Storyblok y crea un nuevo espacio haciendo click en Add Space:

Elige la opción New Space, define un nombre para el proyecto y escoge la ubicación del servidor (por defecto, EU):

Storyblok creará un espacio utilizando una plantilla con contenido básico para ti.

2. Crear un proyecto con Astro

Desde tu nuevo espacio en Storyblok, ves a Get Started y copia el compando npx que te aparece en pantalla:

Ahora ejecuta el comando en tu equipo local y el asistente de Storyblok te guiará por el proceso de instalación. Para seguir este tutorial, necesito que escojas las siguientes opciones:

Esto creará un proyecto con Astro en tu equipo local. Ahora, accede al mismo e instala todas las dependencias ejecutando el siguiente comando:

cd ./your-project-folder && npm install

Una vez está todo instalado, tendrás tu proyecto Astro + Storyblok creado. Pero antes de continuarl, modifiquemos un par de cosas:

Abre el archivo astro.config.mjs. Verás que tu "Access token" de Storyblok está directamente hardcoded en el código, pero también hay una línea comentada que utiliza una variable de entorno (env):

...
export default defineConfig({
integrations: [
storyblok({
// accessToken: env.STORYBLOK_TOKEN,
accessToken: 'xxxxxxxxxxxxxxxxxxxxxxxx',
apiOptions: {
region: '',
},
...

Así que crea un archivo .env en la raíz de tu proyecto y setea allí tu Access token:

# .env file
STORYBLOK_TOKEN: xxxxxxxxxxxxxxxxxxxxxxxx

Ahora modifica tu archivo astro.config.mjs para utilizar la nueva variable de entorno que acabas de crear:

...
export default defineConfig({
integrations: [
storyblok({
- // accessToken: env.STORYBLOK_TOKEN,
- accessToken: 'xxxxxxxxxxxxxxxxxxxxxxxx',
+ accessToken: env.STORYBLOK_TOKEN,
apiOptions: {
region: '',
},
...

Por otro lado, si al crear el proyecto has definido que la región del servidor es US en vez de EU, deberás actualizar ese campo en el mismo archivo:

...
export default defineConfig({
integrations: [
storyblok({
accessToken: env.STORYBLOK_TOKEN,
apiOptions: {
- region: '',
+ region: 'US',
},
...

Paso opcional: Storyblok requiere utilizar HTTPS para acceder a su editor visual. Por defecto, el proyecto Astro que has creado utiliza el plugin basicSsl. Sin embargo, yo prefiero utilizar mkcert. Para instalarlo, ejecuta el siguiente comando:

# install mkcert with npm
npm install vite-plugin-mkcert -D

Y modifica el archivo astro.config.mjs:

// astro.config.mjs file 
import { defineConfig } from 'astro/config';
import storyblok from '@storyblok/astro';
import { loadEnv } from 'vite';
- import basicSsl from '@vitejs/plugin-basic-ssl'
+ import mkcert from 'vite-plugin-mkcert';

const env = loadEnv("", process.cwd(), 'STORYBLOK')

export default defineConfig({
integrations: [
storyblok({
accessToken: env.STORYBLOK_TOKEN,
})
],
vite: {
- plugins: [basicSsl()],
+ plugins: [mkcert()],
server: {
https: true,
},
},
})

3. Habilita el editor visual

¡Ya casi está! Ahora, puedes volver al editor visual de Storyblok y cambiar la URL de preview. Ves a Settings > Configuration > Visual Editor y fija tu URL de localhost usando HTTPS:

Por último, Storyblok añade por defecto la ruta al contenido de la página en la URL. Por lo tanto, por defecto, el editor visual tratará de cargar https://localhost:3000/home. Para cambiarlo, ves a la configuración de página y fija / como el Real path:

Y ahora, si refrescas el editor visual, verás la versión local de tu nuevo proyecto Astro con el contenido de la plantilla que viene por defecto en Storyvblok al crear un nuevo espacio 🥳

4. Despliega el proyecto en Netlify

Tener un editor visual es una herramienta genial, especialmente para editores de contenido. Y esta funcionalidad es algo que otros headless CMS no ofrecen. Sin embargo, utilizar localhost como Preview URL es algo que seguramente no les guste escuchar a tus editores de contenido.

La buena noticia es que Storyblok te permite configurar múltiples Preview URLs. Así pues, puedes mantener localhost como Preview URL para desarrollo en local, y añadir otros entornos de desarrollo/deployment como opciones para el Preview.

Para simplifcar el proceso, puedes desplegar el proyecto directamente en Netlify y configuarar la URL resultante como una nueva Preview URL.

Asumo que te manejas con GitHub y Netlify. De no ser el caso, échale un ojo a esto y esto antes de seguir leyendo.

Una vez has creado un nuevo site en Netlify, lo has conectado a tu proyecto Astro en GitHub y lo has deployado, puedes añadir tu nueva URL de Netlify como Preview URL. Para ello, ves a Settings > Configuration > Visual Editor en tu espacio de Storyblok y configura tu URL de Netlify. Puedes elegir si quieres definirla como entorno por defecto o como otro entorno:

Y ahora sí, por fin tienes tu editor visual habilitado y disponible tanto para developers como editores de contenido... pero con algunas limitaciones.

Por defecto, Astro es un SSG (static site generator) y genera todas las páginas durante el build time. Por lo tanto, editar el contenido en Storyblok usando una URL preview de Netlify no mostrará los cambios visuales instantáneos en la herramienta, a tus editores de contenido.

Para superar este escollo, puedes usar Astro en modo SSR en un entorno específico para tus editores de contenido. Tienes más info sobre cómo hacer esto aquí.

Por último, una vez publicas o actualizas un contenido en Storyblok, necesitarás hacer un nuevo deploy para actualizar tus páginas. Hacer esto manualmente resulta muy molesto, pero puedes configurar un webhook para que se ejecute automáticamente.

En Netlify, ves a Deploys > Deploy settings > Build hooks > Add new hook. Define un nombre (por ejemplo, storyblok_publish), y guárdalo. Copia la URL que se genera.

Ahora, ves a tu espacio en Storyblok y crea un nuevo webhook en Settings > Webhooks > New Webhook. Pega la URL que has copiado de Netlify en el campo Endpoint URL y marca los siguientes triggers: Story > Story published y Story > Story unpublished.

Cada vez que publiques o despubliques una story, se disparará un nuevo deployment en Netlify y, por lo tanto, tu web se actualizará.

¿Es Astro + Storyblok una combinación realmente rápida?

He explicado un montón de cosas sobre cómo crear un proyecto usando usando Astro + Storyblok porque esta combinación es una gran opción para generar páginas ultrarrápidas. Y ahora que tenemos un proyecto creado (usando una plantilla) podemos compararlo con otros frameworks.

Para evaluar los resultados de performance de este proyecto, he creado también un proyecto con Next y otro con Nuxt que utilizan la misma plantilla de Storyblok y los he deployado en Netlify. Así, tengo 3 URLs públicamente accesibles que puedo evaluar usando PageSpeed Insights:

Tras 5 tests para cada proyecto, estos son los resultados medios:

DESKTOP Astro Next Nuxt
FCP (s) 0.413 0.438 1.071
LCP (s) 0.499 0.535 1.071
SI (s) 0.629 0.696 1.328
TBT (ms) 0 1.2 0
CLS 0 0 0.001
MOBILE Astro Next Nuxt
FCP (s) 0.991 0.945 2.539
LCP (s) 0.991 1.197 2.539
SI (s) 1.243 1.377 2.972
TBT(ms) 0 92.4 0
CLS 0 0 0.001

Como puedes ver, Astro tiene mejores resultados que Nuxt y Next. Y sí, estoy testeando una plantilla muy básica, pero muestra las diferencias base que hay entre las distintas tecnologías - y demuestra que Astro + Storyblok es una opción ganadora.

Además, Astro es una opción más ligera y que carga menos recursos JS:

DESKTOP Astro Next Nuxt
Total resources 4 10 11
Size (Bytes) 10977 91912 81407
Total Scripts 2 8 6
Size (Bytes) 7915 88276 62955
MOBILE Astro Next Nuxt
Total resources 4 10 11
Size (Bytes) 10981 92003 81415
Total Scripts 2 8 6
Size (Bytes) 7915 88332 62935

Y tú, ¿lo has probado ya? :)