Precarga de Módulos con QuickLink y Observable API en Angular
Resumen
Puedes optar entre precargar todos los módulos con Lazy Loading, o seleccionar los que a ti te parecen los más importantes que el usuario necesitará. Justamente ese es un inconveniente con esta técnica, no tiene en cuenta al usuario.
Veamos otra forma de precargar módulos teniendo en cuenta al mismo.
Cómo hacer precarga de módulos en pantalla
La estrategia de pregarga de módulos QuickLink utiliza la API nativa del navegador Intersection Observer API para observar el viewport de la pantalla y solo precargar los módulos cuyos enlaces hacia ellos estén visibles.
En otras palabras, si en pantalla hay un enlace visible que redirecciona a un módulo en particular, este será precargado.
Puede ocurrir que un usuario administrador, tenga a disposición todos los módulos de la aplicación. Pero que un usuario con menor privilegio solo podrá acceder a unos pocos módulos y no tiene sentido que precargue todos.
1. Instalando la dependencia
Para activar esta estrategia, instala la dependencia ngx-quicklink con npm i ngx-quicklink --save.
2. Importando el módulo
Importa el módulo QuicklinkModule, en el módulo principal de tu aplicación.
quicklink implementation for Angular. It provides router preloading strategy which automatically downloads the lazy-loaded modules associated with all the visible links on the screen.
Para instalar ngx-quicklink:
npm i ngx-quicklink --save
Tremendo
bastante picante la QuickLink Strategy❄
Me gustaría ver una clase en donde se implemente una estrategia de carga de componentes a demanda cuando el usuario va haciendo scrolling.
supongo que se podría lograr con esta opción solo sería poner esos links de forma oculta dentro de los elementos que son visualizados con ese scrolling
Ojo al supongo porque no se jajaj
QuickLink Strategy se basa en la API de Intersection Observer para precargar solo los módulos pertenecientes a los links que se pueden ver en la pantalla. De esta forma la estrategia de precarga se adapta al usuario, lo cual es muy útil en casos en los que se tiene por ejemplo una interfaz que varía según el rol del usuario (administrador, vendedor, etc).
Esta estrategia no forma parte del core de Angular, aunque fue desarrollada por un ingeniero del equipo de Angular y cuenta con el respaldo de la comunidad.
Holaa, vengo repasando temas de angular, donde la versión de angular usada es la "@angular/common": "^15.1.5", donde la versión de quickLink que me funcionó bien es "ngx-quicklink": "^0.3.0",
Gracias colega, esta info me solucionó el problema
Está increíble la información y se abre un mundo completamente nuevo, me surgió una duda:
Se puede implementar más de una estrategia al tiempo, es decir, la de quickLink por ejemplo y la de custom Strategy ?
Hola, si se puede, pero normalmente es más fácil configurar solo una en específico, pero puedes tener un Custom Strategy que tenga por ejemplo QuickLink y otra.
Excelente curso.
No me buildeaba el project con ngx-quicklink. Especifique una version en especifico y ahi cargo normal:
npm i ngx-quicklink@0.3.1
Buenas alguien tiene este mismo error
Hola Josue:
Quizás ya lo resolviste, pero si a alguien le sucede les dejo la solución que implementé agregando al archivo tsconfig.json lo siguiente:
{...complilerOptions:{..."skipLibCheck":true}}
El error se resolvió, pero no he logrado evidenciar que se cargue los módulos de los links, como se supone debería hacer esta librería.
gracias por el aporte, a mi si me funciono
excelente!
Tengo una duda porque no importa Quicklink Module
en el modulo de categoría ?
¿ Por que muestra que esta cargado el siguiente modulo ?
detect_angular_for_extension_icon_bundle.js
¿ o que significa ese modulo ?
Lbireria ya no compatible con V16
actualmente es compatible con angular 18
Excelente contenido, esto lo sabia, es hora de implementarlo. en mi app productiva.
excelente! tengo una duda porque no importa Quicklink Module
en el modulo de categoría ?
No se si a todos les paso el siguiente error:
ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(WebsiteModule)[InjectionToken LinkHandler -> InjectionToken LinkHandler -> InjectionToken LinkHandler -> InjectionToken LinkHandler]:
NullInjectorError: No provider for InjectionToken LinkHandler!
NullInjectorError: R3InjectorError(WebsiteModule)[InjectionToken LinkHandler -> InjectionToken LinkHandler -> InjectionToken LinkHandler -> InjectionToken LinkHandler]:
NullInjectorError: No provider for InjectionToken LinkHandler!
Lo resolví quitando el modulo QuicklinkDirective del modulo website.module.
habilitar quicklink para todas las rutas
Se me presentada una incompatibilidad al momento de importarlo en los módulos, pero solamente tenia que detener y volver a correr el proyecto. 👍👌
gran extrategia, no la conocia, un amor esta biblioteca