evita que el código espagueti ocurra en el futuro. Entonces, básicamente, te hace ganar tiempo solo al usar NX, pero este concepto de bibliotecas, es muy bueno decirlo así, pero para que funcione, como vimos aquí, para saber que algo ya se ha construido, necesitas almacenar esa información en algún lugar, y ahí es donde entra en juego el almacenamiento en caché. NX te proporciona un almacenamiento en caché avanzado donde analiza todos los archivos fuente, la operación que estás ejecutando, por lo que si es una prueba, tienes la clave como prueba, y puedes tener la compilación o cualquier otra cosa, la aplicación que estás construyendo o la biblioteca, y luego algunas otras opciones de tiempo de ejecución o configuraciones que tienes para React, Chest o algo más. Esto significa que NX tiene una gran tabla con una clave hash y luego la salida que se supone que debe darte en términos de archivos y en términos de salida en la consola en tu dominio. Sabiendo todo esto, sabía que había algún almacenamiento en caché. Teníamos una carpeta de caché, y pensé, ¿puedo poner la caché en mi CI y usarla así tal cual? La respuesta es sí, puedes hacerlo. Supongo que es el primer paso que puedes intentar, y significa que descargas toda la caché cada vez que haces una solicitud de extracción. En algunos casos, puede crecer y crecer hasta llegar a un gigabyte, lo que significa que lleva uno o dos minutos descargarlo y descomprimirlo, y a veces puedes pasar esos dos minutos descargando y descomprimiendo, y al final ni siquiera necesitas la caché porque no es relevante para la solicitud de extracción que tienes. No está tan optimizado y no se puede compartir con los desarrolladores locales, y puedes realizar una ejecución de tareas distribuida. Menciono todo esto porque eso es algo que hace NxCloud, por lo que NxCloud ha sido desarrollado por el equipo de Nx también y básicamente configura todo esto muy fácilmente para que solo tengas que ejecutar un comando en tu terminal. Prepara todo, no tienes que registrarte, y simplemente funciona en el CI. Funciona localmente para ti cada vez que construyes algo y otro desarrollador intenta construirlo, obtiene la misma caché porque se comparte entre los desarrolladores y optimiza el orden en el que se ejecutan las tareas para que todo sea más rápido. Básicamente, deberías usar NxCloud, tiene una característica increíble, es fácil de configurar y aporta tantos beneficios y es tan fácil de usar.
Pero hemos analizado las bibliotecas, hemos analizado el almacenamiento en caché para unir todo junto. Intentemos ver lo que he intentado y dónde realmente he tenido dificultades en todo esto. Aquí vienen las lecciones aprendidas. He jugado un poco con la compilación incremental y con intentar dividir una base de código grande existente. Veamos qué sucedió aquí. Entonces, el concepto de la compilación incremental es que deseas reutilizar las salidas de tus bibliotecas. El comportamiento inicial, como el comportamiento predeterminado, es que cuando deseas construir tu aplicación frontend, utilizas una herramienta como webpack y Babel para transformar tus archivos TypeScript en JavaScript y luego tus archivos JavaScript en otra versión de JavaScript que entienda tu navegador. Y luego realizas alguna minificación para hacerlo un poco más pequeño, alguna eliminación de árbol para eliminar lo que no utilizas y eso es básicamente todo el empaquetado que ocurre dentro de webpack para que tengas un paquete pequeño que puedas lanzar a nuevos usuarios. El nuevo comportamiento sugerido por la compilación incremental de NX, en lugar de construir todo cuando lo necesitas, construyes incrementalmente cada biblioteca. Eso significa que la primera vez que deseas construirlo, construyes todas tus dependencias y luego, cuando realizas un cambio, digamos en el sistema de diseño, reconstruyes el sistema de diseño, la interfaz de usuario, las pruebas web, el dominio frontend y reutilizas la compilación anterior de los demás y básicamente vuelves a empaquetar todo en la aplicación frontend. Se supone que es más rápido y eso es lo que NX te dice en la documentación donde muestran este gráfico donde en azul podemos ver el tiempo de construcción para una compilación normal y luego para una ejecución en frío con la compilación incremental y luego otra ejecución, esta vez en caliente, para la compilación incremental. Intenté configurar esto y no obtuve exactamente los mismos resultados. Básicamente, lo que podemos ver aquí es que para la construcción desde el origen, llevaba alrededor de 60 segundos en frío y en caliente, sin diferencias, y luego, al agregar la compilación incremental, tuve 20 segundos más. Parece un poco normal porque tengo que construir todas las bibliotecas primero, pero luego esperaba que cuando estuviera en caliente no tuviera que construir las bibliotecas, solo tendría que construir la aplicación nuevamente. Así que esperaría que esta línea aquí fuera mucho más rápida. Investigué un poco más y descubrí algunas cosas. En mi configuración, teníamos una configuración personalizada de webpack donde estábamos configurando algunos cargadores de Babel adicionales, algunos cargadores de CSS y otros. La suposición que hice es que básicamente estaba construyendo mis bibliotecas de forma independiente de antemano y luego, al construir la aplicación, estaba tomando la salida de mis bibliotecas y construyendo eso
Comments