2011-01-04 14 views
7

Acabo de leer sobre el patrón de diseño de "carga diferida".¿Carga lenta? ¿Es mejor evitarlo?

¿Está bien sobreutilizar la carga diferida para cargar todas las clases y olvidarse por completo de include(..)?
¿Cuáles son los inconvenientes de este enfoque?

Respuesta

6

un par de puntos de carga automática:

  1. Va a ver un espectáculo agradable mejora mediante el uso de la auto-carga frente siempre incluyendo todas sus archivos todo el tiempo (sobre todo porque el número de archivos crece más y más grande).

  2. En la aplicación de carga automática, es mejor utilizar spl_autoload_register() de __autoload().

Aunque muchas veces cuando la gente habla de carga diferida en PHP, que están hablando de algo como lo siguiente:

class Foo { 
    protected $bar = null; 

    public function getBar() { 
     if ($this->bar == null) { 
      $this->bar = ExpensiveOperation(); 
     } 
     return $this->bar; 
    } 
} 

Entonces sólo cargar una propiedad cuando en realidad necesita ser utilizado , y no cada vez que crea una instancia del objeto, lo que potencialmente puede tener algunos buenos beneficios.

+5

+1 para spl_autoload_register() –

2

Está bien usar includes explícitos, o tener __autoload() encontrar sus clases para usted. De cualquier manera.

No recomendaría mezclar las dos estrategias, sin embargo. Las líneas include serían innecesarias.

3

Uno de los beneficios de un cargador lento es que solo carga los archivos de clase que realmente necesita el script durante el curso de su ejecución, lo que puede ahorrar memoria; de lo contrario, podría incluir todos los archivos de la clase, ya sean necesarios o no. Dependiendo de sus secuencias de comandos, esto puede hacer una gran diferencia.

+0

Seguramente este es ** el ** beneficio de un cargador perezoso? –

+0

@Will - No hay necesidad de largas listas de inclusiones sería el otro beneficio importante, y tener que agregar a la lista cada vez que agregue una nueva clase, es un beneficio secundario; pero la mejora de la memoria/rendimiento es sin duda el principal beneficio. También previene la sobrecarga de include_once, mientras que no tener que preocuparse por la duplicación incluye –

Cuestiones relacionadas