¿Qué es la carga ansiosa?

161

¿Qué es la carga ansiosa? Codifico en PHP / JS pero una respuesta más generalizada estará bien.

Vi muchas preguntas sobre Java y Ruby, pero no conozco ninguno de estos lenguajes y me resulta difícil leer el código. No sé qué se supone que debe hacer en primer lugar

Quamis
fuente
Gran pregunta
PA-GW

Respuestas:

383

Hay tres niveles:

  1. Ansioso de cargar: haces todo cuando te lo piden. El ejemplo clásico es cuando multiplica dos matrices. Haces todos los cálculos. Esa es una carga ansiosa;
  2. Carga diferida: solo hace un cálculo cuando es necesario. En el ejemplo anterior, no hace ningún cálculo hasta que accede a un elemento de la matriz de resultados; y
  3. Carga demasiado ansiosa: aquí es donde intentas anticipar lo que el usuario pedirá y precargarlo.

Espero que tenga sentido en el contexto que lo estás viendo.

Déjame darte un ejemplo de "Webby".

Imagine una página con imágenes de desplazamiento como elementos de menú o navegación. Hay tres formas en que la carga de imágenes podría funcionar en esta página:

  1. Cargue cada imagen requerida antes de renderizar la página ( ansiosa );
  2. Cargue solo las imágenes mostradas en la página cargue y cargue las otras si es necesario ( perezoso ); y
  3. Cargue solo las imágenes mostradas al cargar la página. Después de que la página se haya cargado, precargue las otras imágenes en segundo plano en caso de que las necesite ( demasiado ansioso ).

¿Tener sentido?

cletus
fuente
3
Aunque se fue por la borda yendo más allá de la pregunta específica; Esta sigue siendo una excelente respuesta. Es breve, simple y da un ejemplo.
Phil
23

Es lo opuesto a la carga diferida , que difiere la inicialización de un objeto hasta que se necesita. La carga ansiosa inicializa un objeto tras la creación.

Bill el lagarto
fuente
1
Podría agregar que estos términos generalmente se usan (¿y quizás provienen de?) En el contexto de un ORM (Object Relational Mapper), donde se asigna un objeto a una tabla en una base de datos relacional.
Loki
10

Si imagina que tiene un objeto llamado persona que tiene un nombre, una fecha de nacimiento y una cantidad de detalles menos críticos, digamos el color favorito, el programa de televisión favorito.

Para cargar esta clase de manera diferida, debe iniciarla leyendo, tal vez de una base de datos, todos los detalles básicos utilizados con más frecuencia (por ejemplo, nombre y fecha de nacimiento) y solo leerá los detalles menos utilizados cuando / si son necesarios, la carga ansiosa es lo opuesto , es decir, carga todos los detalles al mismo tiempo.

Los beneficios de la carga perezosa a menudo se citan como efiecencia, sin embargo, si los objetos no son tan complejos o la eficiencia no es una preocupación, se puede usar una carga ansiosa

Dave D
fuente
77
Cuando lo piensa, la carga diferida se trata más de menos memoria y más cálculos en cada llamada de función, mientras que la carga ansiosa usaría más memoria y más cálculos cuando se crea la clase y menos cálculos cuando se llama a la función.
Loki
0

La carga ansiosa también se usa en Angular 8. Simplemente significa que en el instante en que la aplicación se carga dentro del navegador, automáticamente, instantáneamente obtenemos todo el código dentro de un módulo en particular, por ejemplo, digamos que acaba de crear un Módulo de autenticación con un inicio de sesión y registro componente que se importa a un módulo de aplicación .

Por el contrario, hay una carga diferida , que es cuando le decimos al módulo de aplicación que tiene cargado el módulo de autenticación que solo cargue Módulo de autenticación en un momento determinado, como cuando un usuario se dirige a una ruta determinada.

Daniel
fuente