Precarga de Módulos en Angular para Mejorar el Rendimiento
Resumen
Modularizar una aplicación nos beneficia en rendimiento gracias a las técnicas de Lazy Loading y CodeSplitting pero... ¿Funciona realmente? ¿El rendimiento de mi app será el óptimo?
Diferencias entre hacer CodeSplitting y sin CodeSplitting
Al realizar un ng serve, SIN CodeSplitting, puedes observar en la consola algo como lo siguiente:
Mientras que al realizarlo luego de haber modularizado la app se observa lo siguiente:
En la primera imagen, toda tu aplicación se agrupa en el main.js y en la segunda, luego de modularizar, se crea un "Chunk" por cada módulo que tenga la app.
Hasta aquí ya puedes observar la diferencia en el tamaño de los archivos. Si bien estamos compilando la aplicación en modo desarrollo. En modo producción se comprime aún más y pesarán menos los archivos.
Diferencias entre hacer Lazy Loading y sin Lazy Loading
Al ingresar a tu aplicación desde el navegador, utiliza las herramientas de desarrollo que proveen para inspeccionar la red.
Sin Lazy Loading, solo se puede observar el archivo main.js que contiene toda tu aplicación.
Con Lazy Loading, puedes observar que se desprende un nuevo archivo llamado src_app_modules_website_website_module_ts.js el cual contiene el módulo Website.
Te preguntarás, ¿dónde están los archivos correspondientes a mis otros módulos?
Redirecciónate a una ruta de tus otros módulos para observar como se carga dinamicamente el archivo Javascript.
Esa es la magia del Lazy Loading. Has logrado que tu aplicación cargue en N cantidad de partes, reduciendo el peso de la misma y mejorando su velocidad de renderizado.
Y seguro has entendido mejor lo que es Lazy Loading, CodeSplitting y cómo trabajan juntos.
Veo esto bastante util para sub secciones de la app donde sabemos que el usuario no va a entrar muy frecuente, como la seccion del cms que hicimos antes, sin embargo aqui en las categorias al ser una tienda virtual, sabemos que el usuario querra explorar esas secciones , por lo tanto al menos en este caso, no se si sea buena idea implementar esta tecnica 🤨
Sería interesante una respuesta a esto, sobre cada cuando es bueno seccionar nuestra app en estos módulos
En el diseño UI había un login, quizás ahí tendría más sentido que separar home y category, teniendo en cuenta que puede tomarse como que forman parte de lo mismo.
No creo que sea un inconveniente utilizar lazy loading en una tienda virtual, se supone que al dividir el archivo principal main.js en diferentes chunks.js la carga de las paginas serán mucho más rápida
¿ Al tener categorías como un módulo y no como un componente significa que en caso de requerir ser reutilizado debe hacerse al nivel de abstracción correspondiente ?.
Paren todo, esta parte de modulos va a quedar desactualizada con los Standalone components
mm es decir que podemos usar la estrucutra que querramos (sin modularizar) y al final con correr esos comandos optimizamos la descarga de todo el proyecto ???
ng g @angular/core:standalone and select "Convert all components, directives and pipes to standalone"