Pregunta

¿Qué es la carga diferida?

Editar después de leer algunas respuestas] ¿Por qué las personas usan este término tan a menudo?

Digamos que simplemente usa un conjunto de registros ASP/ADO y lo carga con datos o fuente de datos ADO.NET para una vista de cuadrícula.

Supongo que debería haber preguntado por qué la gente usa el término Lazy Loading, ¿qué "otros" tipos son?

¿Fue útil?

Solución

Se llama carga diferida porque, como una persona perezosa, estás posponiendo hacer algo que no quieres.Lo opuesto es Eager Loading, donde cargas algo de inmediato, mucho antes de que lo necesites.

Si tiene curiosidad por saber por qué la gente podría utilizar la carga diferida, considere una aplicación que tarda MUCHO tiempo en iniciarse.Esta aplicación probablemente se esté cargando mucho...cargar cosas desde el disco y hacer cálculos y todo eso mucho antes de que sea necesario.

Compare esto con la carga diferida, la aplicación se iniciaría mucho más rápido, pero luego, la primera vez que necesite hacer algo que requiera una carga prolongada, puede haber una pequeña pausa mientras se carga por primera vez.Por lo tanto, con la carga diferida, estás amortizando el tiempo de carga durante el transcurso de la ejecución de tu aplicación...y, de hecho, puede ahorrarse la carga de cosas que el usuario nunca tendrá la intención de usar.

Otros consejos

Lazy Loading es una práctica de programación en la que solo cargas o inicializas un objeto cuando lo necesitas por primera vez.Potencialmente, esto puede brindarle un gran aumento en el rendimiento, especialmente si tiene muchos componentes en su aplicación.

Como siempre, Wikipedia tiene más detalles.

La carga diferida es un concepto en el que retrasamos la carga de la unidad de objeto en el punto donde la necesitamos.En palabras simples, carga de objetos bajo demanda en lugar de cargar los objetos innecesariamente.Por ejemplo, si tiene una clase "Cliente" que tiene el objeto "Pedidos" agregado.Entonces, le gustaría cargar los datos del cliente, pero los objetos de los pedidos le gustaría retrasarlos hasta que su aplicación los necesite.

A continuación se muestra un vídeo de YouTube que demuestra cómo utilizar la carga diferida, cómo podemos implementar la carga diferida y las ventajas y desventajas de la misma.

http://www.youtube.com/watch?v=2SrfdAkwmFo

La definición de Wikipedia, la carga perezosa es un patrón de diseño comúnmente utilizado en la programación de computadoras para diferir la inicialización de un objeto hasta el punto en el que se necesita....

http://en.wikipedia.org/wiki/Lazy%20loading

El término carga diferida se utiliza generalmente cuando se habla de mapeadores relacionales de objetos.Si usa ADO.NET directamente, siempre obtendrá una carga entusiasta (es decir, siempre carga justo lo que usted especifica).

Los mapeadores OR como nHibernate admiten la devolución de objetos proxy que se "rellenan" con los datos correctos sólo cuando se accede a los datos.De esa manera sólo cargas los datos que realmente utilizas.Esta es una característica útil cuando especifica muchas relaciones entre objetos que pueden cargarse desde la base de datos, no desea que el asignador OR cargue todos los objetos relacionados y los objetos relacionados con los objetos relacionados, etc.Eso puede resultar en que se cargue toda su base de datos.

Este problema también se puede evitar mediante un diseño cuidadoso del modelo de objetos.(Usar agregados y cargar solo raíces agregadas como en el diseño basado en dominios es una forma de solucionar esto sin utilizar carga diferida).

La carga diferida puede provocar que el asignador realice muchos accesos pequeños a bases de datos en lugar de recuperar todos los datos que necesita una vez.Esto también puede provocar problemas de rendimiento.

Aquí hay un ejemplo de un código Python real que escribí:

class Item(Model):
    ...
    @property
    def total(self):
        if not hasattr(self, "_total"):
            self._total = self.quantity \
                  + sum(bi.quantity for bi in self.borroweditem_set.all())
        return self._total

Básicamente, tengo una clase de artículo que representa un artículo en nuestro inventario.La cantidad total de elementos que tenemos es la cantidad que poseemos más la suma de todos los elementos que tomamos prestados de varias fuentes.Todos estos números se almacenan en nuestra base de datos y no tendría sentido calcularlos hasta que se solicite realmente el total (ya que a menudo los Artículos se utilizarán sin que se solicite el total).

Entonces la propiedad total verifica si el campo _total existe.Si no es así, entonces el código de propiedad consulta la base de datos y la calcula, luego almacena el valor en el campo _total para que no sea necesario volver a calcularlo la próxima vez que se solicite.

Carga lenta:no pierdes el tiempo (ni la memoria) con cosas que quizás no necesites.Luego, cuando lo necesitas, lleva más tiempo, pero está bien.

Ejemplo de la vida:en lugar de aprender ese libro de frases en francés, aprendes las frases una a la vez, según sean necesarias.¿Cuándo tiene sentido esto?Si solo vas a estar en Francia por un corto tiempo (es decir, no necesitarás muchas frases) o si necesitas irte muy pronto.Si vas a estar allí durante dos años y/o tienes mucho tiempo para estudiar, entonces podría ser mucho más eficiente aprender todo el libro de frases desde el principio (carga ansiosa).

[Inspirado en el Atom como lo enseña Venus en términos de pandillas en WKRP.]

La carga diferida es un término utilizado frecuentemente en bases de datos para referirse al concepto de cargar partes de la información requerida solo cuando es necesario.

Es decir.supongamos que necesita tener un registro que tenga una combinación de varias tablas.Si lo buscara todo de una vez, tomaría más tiempo que si buscara, por ejemplo, solo la tabla principal.Al utilizar la carga diferida, el resto de la información se recuperará solo si es necesario.Por lo tanto, en ciertos escenarios se trata de una "carga eficiente".

Los otros tipos de 'carga' son:

  1. Carga ansiosa: carga todas las tablas conectadas a la vez.

es un patrón de diseño.

Carga lenta:Hasta que su código requiera alguna operación realizada por un objeto en particular, el objeto no se inicializa y, una vez inicializado, no reinicializa el objeto, sino que utiliza el objeto previamente inicializado.

Esto hace que su código sea mucho más eficiente y ayuda a administrar el uso de la memoria.

Ejemplos de aplicaciones de carga diferida:

Titular del valor de inicialización fantasma perezoso

Algunas de las ventajas de la carga diferida:

  1. Minimiza el tiempo de inicio de la aplicación.
  2. La aplicación consume menos memoria debido a la carga bajo demanda.
  3. Se evitan solicitudes innecesarias al servidor.

Un ejemplo de carga diferida sería una cuadrícula o tabla con muchos datos en una página web para ver donde la aplicación solo carga el tamaño del punto de vista del navegador del usuario en ese momento.Cuando se desplazan hacia abajo para querer ver más contenido o datos, se cargarán más datos a la vista en ese momento.

Esto se está convirtiendo cada vez más en un patrón de diseño visual/de interacción común, también a través de ajax o jQuery.

Y como se mencionó anteriormente, lo opuesto sería la carga ansiosa, donde no se tiene en cuenta al cliente, lo que podría afectar el rendimiento.

Lazy<T> ahora es parte de c# 4.0 - hay una buena página en MSDN lo que explica el concepto.

Según geeksforgeeks, la carga diferida es un patrón de diseño de software en el que la inicialización de un objeto se produce sólo cuando realmente se necesita y no antes para preservar la simplicidad de uso y mejorar el rendimiento.

https://www.geeksforgeeks.org/lazy-loading-design-pattern/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top