Torna al blog

Astro 6: performance edge-first, routing dinamico e DX semplificata

Panoramica di Astro 6: SSR edge-first, routing dinamico nativo, Actions migliorate, cache layer unificato e strumenti per AI/streaming.

Edoardo Midali

Edoardo Midali

Developer · Content Creator

4 min di lettura

AstroAstro 6 porta il focus sull'esecuzione edge-first e su una DX piu semplice per siti content-heavy e applicazioni ibride. Questa major release introduce routing dinamico nativo, Actions potenziate, cache unificata e tooling per AI/streaming. Ecco cosa serve sapere per pianificare upgrade o nuovi progetti.

Panoramica tecnica

AstroAstro 6 è un framework frontend edge-first che semplifica lo sviluppo di siti e app ibride. Integrato con CloudflareCloudflare, VercelVercel, NetlifyNetlify e DenoDeno, offre supporto nativo a ReactReact, VueVue, SvelteSvelte, SolidJSSolidJS e altri framework.

Novita chiave

  • Routing dinamico nativo: segmenti opzionali, route groups, middleware unificato.
  • SSR edge-first: build produce bundle ottimizzato per runtime edge (CloudflareCloudflare, VercelVercel, NetlifyNetlify, DenoDeno).
  • Astro Actions 2.0: schema validation integrata con ZodZod, retry/backoff, streaming response SSE.
  • Cache layer unificata: astro:cache per memoria/disco/KV con API coerente tra adapter.
  • DX migliorata: astro check --fix per lint/type, error overlay con copy stack traces, HMR piu veloce.
  • Performance: build incrementali, tree-shaking piu aggressivo, lazy load migliorato.
  • AI/streaming: supporto nativo a SSE in Actions, SDK per vector store, file loader per modelli edge con AnthropicAnthropic e OpenAIOpenAI.

Upgrade rapido da Astro 5.x

PassoComando/azioneNote
1npm i @[astro]@6Richiede Node.js 18+
2Aggiorna adapterUsa i nuovi adapters edge-ready (CloudflareCloudflare, VercelVercel, NetlifyNetlify)
3RoutingConverte [slug].astro complessi in segmenti [[slug]] se opzionali
4ActionsMigra a defineAction con schema ZodZod
5CacheSposta fetch ripetuti in astro:cache

Routing dinamico e middleware

  • Route groups: src/pages/(marketing)/[[slug]].astro per organizzare pagine senza impattare URL.
  • Parametri opzionali: [[slug]] consente route che funzionano con o senza parametro.
  • Middleware unificato: un solo file src/middleware.ts gestisce auth, rewrite, headers e logging.
  • View transitions: piu stabili con segmenti nested, prefetch intelligente e gestione errori migliorata.
  • Wildcard avanzati: supporto a catch-all e combinazioni complesse per CMS headless come Contentful e NotionNotion.

Esempio middleware unificato

// src/middleware.ts
import { defineMiddleware } from "astro:middleware";

export const onRequest = defineMiddleware(async (context, next) => {
  // Auth check
  const token = context.cookies.get("auth");
  if (!token && context.url.pathname.startsWith("/dashboard")) {
    return context.redirect("/login");
  }

  // Headers comuni
  const response = await next();
  response.headers.set("X-Frame-Options", "DENY");
  return response;
});

Astro Actions 2.0

// src/actions/contact.ts
import { defineAction } from "astro:actions";
import { z } from "zod";

export const sendContact = defineAction({
  input: z.object({ email: z.string().email(), message: z.string().min(10) }),
  handler: async ({ email, message }) => {
    // Invio verso coda o webhook
    return { ok: true, received: { email, message } };
  },
  retry: { attempts: 3, backoff: "exponential" },
});
  • Input validation built-in, niente schema manuale.
  • Streaming: return stream() per risposte chunked.
  • Edge-safe per default (niente fs/net).

Cache layer unificata

  • API astro:cache: compatibile con caches.default standard Web API.
  • Namespace: per isolare cache tra moduli.
  • Strategie: stale-while-revalidate, cache-first, network-only, cache-aside.
  • Supporto adapter-specific: KV (CloudflareCloudflare), RedisRedis (VercelVercel/custom), R2, memoria locale.
  • Invalidazione selettiva: tag-based cache purge per aggiornamenti mirati.

Esempio cache usage

// src/actions/posts.ts
import { cache } from "astro:cache";

export async function getPosts() {
  const cached = await cache.get("posts", { namespace: "blog" });
  if (cached) return cached;

  const posts = await db.query("SELECT * FROM posts");
  await cache.set("posts", posts, {
    namespace: "blog",
    ttl: 3600,
    tags: ["posts"],
  });
  return posts;
}

Benchmark interni (AstroAstro 6 vs 5.15)

ScenarioAstroAstro 5.15AstroAstro 6Delta
Build blog 1k pagine42s34s-19%
First render edge45ms28ms-38%
Bandwidth assets100%82%-18%

Integrazione AI/streaming

  • Supporto SSE nativo in Actions (return stream) per chat/AI con OpenAIOpenAI, AnthropicAnthropic, Hugging Face.
  • SDK ufficiale per vector store (D1/CloudflareCloudflare Vectorize/RedisRedis) con astro:db.
  • File loader per modelli piccoli (tokenizers) con edge caching.

Quando aggiornare

  • Subito: siti edge/SSR, app con Actions critiche, progetti che sfruttano cache KV (CloudflareCloudflare, VercelVercel).
  • Pianificato entro Q1: static blog e siti content-first; breaking minimal a parte adapter e Node.js 18+.
  • Valuta attentamente: progetti con plugin non edge-safe o integrazioni legacy; testa in staging prima.
  • Attendi: se usi adapter custom o framework ibridi (Next.js, NuxtNuxt, SvelteKitSvelteKit) che non supportano AstroAstro 6; aspetta stabilizzazione.