GOOGLE ADS

miércoles, 20 de abril de 2022

los módulos de retardo se precargan después de la primera representación de la aplicación

Actualmente estoy trabajando en una aplicación de una sola página. en la página principal se muestran varias tarjetas. Estas tarjetas pueden estar habilitadas o deshabilitadas. Si está deshabilitado, solo se muestra el título de la tarjeta. Si está habilitado, se muestra el título más el contenido (que se carga de forma diferida) de la tarjeta. De forma predeterminada, todas las tarjetas se muestran y deshabilitan. Según el dossier del usuario, algunas tarjetas pueden estar activas al cargar la página.

Actualmente, no configuré ninguna estrategia de precarga, por lo tanto, al cargar la página, solo se carga el contenido de la tarjeta activa.

He intentado configurar preloadingStrategy para preloadAllModules, funciona bien, pero ralentiza el inicio de la aplicación. En realidad, el contenido de las tarjetas activas aparece más lento ya que todos los módulos se cargan al mismo tiempo.

=> Lo que quiero es: 1. cargar la aplicación 2. cargar el contenido de todas las tarjetas activas 3. precargar todos los demás módulos que no se muestran al inicio

=> Algún tipo de retraso en la precarga después del primer renderizado

=> ¿Crees que es posible?

Gracias de antemano por su colaboración


Solución del problema

Creo que es posible, tienes que hacer una estrategia de precarga personalizada:

Puede actualizar la configuración de su enrutador raíz de esta manera:

@Injectable({
providedIn: 'root'
})
export class CustomPreload implements PreloadingStrategy {
preload(route: Route, load: () => Observable<any>): Observable<any> {
// you implement this function somewhere, somehow
if (isActiveCardRoute(route)) {
// this will make it load immediately
return load();
} else {
/*
* this will load the remaining modules after 5 seconds. You can possibly make a more
* 'complex' logic to have it load sequentially or in bigger intervals to make sure
* the app doesn't lag when loading
*/
return timer(5000).pipe(
switchMap(() => load())
)
}
}
}

Si de alguna manera necesita averiguar antes de esto, si una tarjeta está activa o no cargando la API/iniciar sesión. Debe agregar esta lógica al APP_INITIALIZER, o supongo que también puede agregarla al CustomPreloadinyectar el apropiado servicios.

Esto CustomPreload, lo puedes agregar a tu RouterConfig:

RouterModule.forRoot(AppRoutes, {
preloadingStrategy: CustomPreload
});

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...