2011-01-04 18 views
7

Ho appena letto sul modello di progettazione "caricamento lento".Caricamento lento? È meglio evitarlo?

È corretto sovraccaricare il caricamento lento per caricare tutte le classi e dimenticare completamente include(..)?
Quali sono gli aspetti negativi di questo approccio?

risposta

6

Un paio di punti sul caricamento automatico:

  1. Si vedrà una bella prestazione miglioramento utilizzando caricamento automatico contro compresa sempre tutti i file tutto il tempo (tanto più che il numero di file cresce sempre più grande).

  2. Nell'attuare caricamento automatico, è meglio usare spl_autoload_register() di __autoload().

Anche se un sacco di volte quando si parla di lazy loading in PHP, stanno parlando di qualcosa di simile al seguente:

class Foo { 
    protected $bar = null; 

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

Poi si carica solo una proprietà quando ha bisogno in realtà per essere usato e non ogni volta che istanziate l'oggetto, che potenzialmente può avere dei buoni benefici.

+5

+1 per spl_autoload_register() –

2

Va bene utilizzare include espliciti o per avere __autoload() trovare le classi per voi. In entrambi i casi.

Non consiglierei di mescolare le due strategie, però. Le linee include non sarebbero necessarie.

3

Uno dei vantaggi di un caricatore lento è che carica solo i file di classe effettivamente necessari dallo script durante la sua esecuzione, salvando potenzialmente la memoria; quando altrimenti potresti includere tutti i file di classe, se sono necessari o meno. A seconda dei tuoi script, questo può fare la differenza.

+0

Sicuramente questo è ** il ** vantaggio di un caricatore pigro? –

+0

@Will - Non c'è bisogno di lunghi elenchi di include sarebbe l'altro grande vantaggio, e dover aggiungere alla lista ogni volta che si aggiunge una nuova classe, è un vantaggio secondario; ma il miglioramento della memoria/delle prestazioni è certamente il principale vantaggio. Inoltre previene il sovraccarico di include_once, mentre non deve preoccuparsi di duplicati include –

Problemi correlati