todos los activos estáticos en tiempo de compilación también serán más grandes. Entonces, si estamos trabajando, no sé, por ejemplo, en una plataforma de e-commerce donde vendemos productos y comenzamos a agregar nuevos productos y cambiar la descripción de los productos y, no sé, cambiar el precio de los productos, si queremos generar todas las páginas para todos los productos nuevamente y tenemos que ejecutar un proceso de compilación, el tiempo aumentará y será muy largo y probablemente eso no nos ayude o no funcione para el escenario que estamos tratando de resolver. Hay un concepto utilizado con los generadores de sitios estáticos que es la implementación atómica, lo que significa que cuando ejecutamos el proceso de compilación, tenemos que generar todos los activos estáticos para nuestro sitio web. Si hay algún error durante la ejecución de este proceso de compilación, o si hay alguna página que no estamos generando, decimos que estamos rompiendo esta implementación atómica porque tendremos diferentes versiones de las páginas viviendo en nuestro sitio web y eso es algo que no queremos. Quiero decir, queremos tener sincronizadas todas las páginas y, como dijimos, que todas las páginas que estamos mostrando en nuestro sitio web sean de una sola versión, digamos.
Pero, bueno, quiero decir que el aumento del tiempo de compilación es un problema, por lo que el equipo de NetJS analizó eso y creó una nueva función para el marco de trabajo que es la regeneración estática incremental, que permite a los desarrolladores utilizar una generación estática pero por página sin tener que reconstruir todo el sitio. Esta función funciona de la siguiente manera. Ejecutaremos este proceso de compilación una vez. Generaremos todos los activos estáticos o todas las páginas estáticas o probablemente un conjunto limitado de páginas en un sitio de blog, serían probablemente las últimas cinco publicaciones de blog y la página de inicio, digamos, y almacenaremos en caché la versión, esta versión uno de las páginas, y estableceremos el valor para la propiedad de revalidación, que es revalidar y estableceremos una cantidad de segundos que ocurrirán entre la primera vez que los usuarios visiten esta versión uno de la página y cuando expire este tiempo de revalidación, lo que el marco de trabajo hará es que para el próximo usuario que visite nuestro sitio web, mostraremos la versión en caché de la página, pero en segundo plano se ejecutará un proceso de compilación solo para esa página y generaremos la nueva versión de esa página que se creará la página estática almacenada en el servidor web y en caché, por lo que los próximos usuarios que visiten nuestro sitio web verán esta versión dos de la página. Esto es útil porque tendremos compilaciones más rápidas porque generaremos menos activos estáticos en tiempo de compilación y tendremos una caché más alta debido a esto, porque mientras tanto estaremos generando nuevas versiones de la página y las mantendremos en caché. Esto también ayuda a trabajar con sistemas de gestión de contenido sin cabeza o diferentes sistemas de contenido que podemos usar para generar el contenido que mostraremos en nuestro sitio web, porque si se aplica un cambio al contenido de nuestro sitio web, digamos el mismo ejemplo de la publicación de blog, si tenemos un error tipográfico o estamos cambiando algún contenido para una publicación de blog, la próxima vez que el usuario visite esa publicación de blog o la página para ese artículo, utilizaremos la regeneración estática incremental para generar una nueva versión de la página y mostrar eso a todos los demás usuarios que visiten nuestro sitio web. Y estas páginas persistirán entre implementaciones, por lo que si queremos implementar una nueva versión de nuestro archivo de nuestro sitio web porque no sé, hicimos muchos cambios en el código o cualquier cosa, las páginas que se generaron utilizando la regeneración estática incremental se mantendrán allí, lo cual es genial, pero también tenemos el problema de que estamos rompiendo la implementación atómica, el concepto que mencionamos antes. Veamos una demostración rápida de cómo funciona esto. Tengo este sitio web con un título y una cuadrícula de características, digamos, y usaré los tres métodos diferentes para generar una página que mencionamos. El renderizado en el lado del servidor, la generación de sitios estáticos y la regeneración estática incremental. Entonces, estoy ejecutando esta página con el renderizado en el lado del servidor. Siempre generaremos en tiempo real el contenido, por lo que el contenido siempre estará actualizado porque lo estamos ejecutando para cada solicitud. Si utilizo la generación de sitios estáticos, siempre veremos la misma página porque se generó en tiempo de compilación. Si utilizamos la regeneración estática incremental, veremos la página que se creó en tiempo de compilación, la página estática. Pero si hacemos un cambio, veremos ese cambio para los próximos visitantes después de aplicarlo porque ejecutaremos este proceso de compilación nuevamente solo para esta página. Si vamos al código de mi sitio web, no me detendré a explicar la jerarquía de carpetas y archivos que Next.js crea para un proyecto. Tendremos una carpeta llamada páginas y dentro de ella tenemos las tres URL que visité con las rutas dinámicas que mencioné antes. Dependiendo del slug, qué página mostraremos. Tendremos una función principal que usaremos para renderizar el contenido html para nuestra página utilizando componentes aquí como componentes de react. Tengo un diseño y una página y usamos el contenido que traemos de una API, que es una llamada de API de un CMS sin cabeza que estoy usando para mantener el contenido de mi sitio web. El sistema de gestión de contenido sin cabeza que estoy usando es storyblock. Estamos usando el cliente de storyblock para obtener la información de una determinada página o historia y con los datos que estamos trayendo de la API, lo devolvemos como una propiedad, como una historia, a la función principal que generará todo el marcado para nuestra página. Si ves aquí, estoy codificando el slug o la URL de una página porque esta es la única página que tengo en mi sitio y este método get server site props se ejecutará para cada visitante que llegue a nuestro sitio web. Si vamos a este ejemplo, que es la generación de sitios estáticos, la función principal es exactamente la misma. Tenemos una función muy similar llamada get static props que se ejecuta igual y trae la información y la devuelve a la función principal para generar el marcado. Pero como necesitamos definir qué páginas vamos a renderizar en tiempo de compilación, tenemos esta otra función llamada get static paths con la lógica para generar todas las URL o todas las páginas que queremos renderizar en tiempo de compilación.
Comments