¿Nextjs lee la caché de .next/server/pages/ cuando se utiliza ISR y es posible servirla desde una CDN?
Quiero implementar un proyecto próximo fuera de Vercel y estoy confundido sobre cómo funciona la caché. Al acceder a la URL de una página con ISR habilitado, puedo confirmar que la base de datos no se accede antes de que termine el período de revalidación, pero…
Primera pregunta: La página generada parece estar en .next/server/pages/mypage.html (y mypage.json); sin embargo, al revisar las herramientas de desarrollo después de solicitar la URL de la página, solo veo múltiples solicitudes a .next/static/* y .next/static/chunks/pages/*, que parecen ser archivos generados en tiempo de compilación que no saben nada acerca de lo que ha sido regenerado por ISR al acceder a la base de datos. No puedo encontrar nada relacionado con .next/server/pages. ¿Alguien puede explicarme eso?
Segunda pregunta: Si se accede desde .next/server, ¿es posible almacenar en caché a través de un CDN, dado que la documentación de NextJS solo recomienda alojar .next/static en el CDN?
La configuración exacta para cargar tus archivos a un CDN específico dependerá de tu CDN de elección. La única carpeta que debes alojar en tu CDN es el contenido de .next/static/, que debe cargarse como _next/static/, como indica la solicitud de URL anterior. No cargues el resto de la carpeta .next/, ya que no debes exponer tu código de servidor y otras configuraciones al público.
Gracias de antemano.
davy.ai
Respuestas para implementar un proyecto Next.js fuera de Vercel y uso de caché
Primera pregunta
La página generada de un proyecto Next.js con ISR habilitado se encuentra en el directorio
.next/server/pages/mypage.html
(ymypage.json
). Sin embargo, al acceder a la página a través de su URL, se realizan múltiples solicitudes a.next/static/*
y.next/static/chunks/pages/*
. Estas solicitudes son para archivos generados en tiempo de compilación y no conocen la regeneración de la página a través de ISR cuando se accede a la base de datos.La razón de este comportamiento es que Next.js genera páginas HTML estáticas en tiempo de compilación y las sirve estáticamente desde el directorio
.next/server/pages
. Sin embargo, cuando una página utiliza ISR, sus datos pueden ser validados nuevamente en tiempo de ejecución. Cuando esto ocurre, Next.js genera nuevas páginas HTML estáticas y las sirve desde.next/cache/ISR/dynamic
. Por lo tanto, al acceder a la URL de una página con ISR, la solicitud inicial obtiene la página HTML estática desde.next/server/pages
y cualquier solicitud posterior se realiza a las nuevas páginas generadas en tiempo de ejecución y servidas desde.next/cache/ISR/dynamic
.Segunda pregunta
Si una página se está accediendo desde
.next/server
, es posible almacenar en caché a través de un CDN. Sin embargo, según la documentación de Next.js, la única carpeta que debe alojarse en el CDN es el contenido de.next/static/
, que debe cargarse como_next/static/
. Esto se debe a que los activos estáticos ya están optimizados y en caché por Next.js.Por lo tanto, si se utiliza un CDN, solo los archivos estáticos generados por Next.js durante el proceso de compilación deben alojarse en él. El contenido dinámico generado a través de ISR debe ser servido a través del servidor de Next.js.