2011-01-24 13 views
18

Sto cercando di trovare una risposta definitiva alla domanda che autoload uccide le prestazioni quando si utilizza APC e perché (parametri di riferimento?)Il caricamento automatico uccide davvero le prestazioni quando si utilizza APC (ultime versioni/aggiornate). Benchmark?

P.S. Trovato questo link utilizzando google/stackoverflow, ma mi chiedo se questo ancora detiene? PHP deve essere migliorato per gestire questo? Perché il caricamento automatico è abbastanza bello!

+1

Riferimento: http://stackoverflow.com/questions/1396501/do-php-opcode-cache-work-with-autoload, http://stackoverflow.com/questions/1941541/php5-frameworks-autoloading-and -opcode-caching –

+0

Grazie Mike B. Ho letto questo argomento. Speravo in alcuni benchmark. Immagino di dover aggiornare la mia risposta – Alfred

+2

Interessante domanda - Non avrei mai nemmeno pensato che il caricamento automatico avrebbe causato problemi, e io uso una grande libreria che utilizza molto caricamento automatico e ha un enorme vantaggio da APC, quindi i miei pensieri sono che il semplice caricamento automatico non è Non male per APC. Benchmark sarebbe interessante però. – Hamish

risposta

5

Personalmente, non credo che fare affidamento su __autoload() sia una buona pratica. PHP è un linguaggio a caratteri generici, non un linguaggio pigro tipizzato. :)

Partenza alcune prestazioni qui:

risposta di Rasmus su questo (che anche avete trovato) era il mio guidline attraverso tutti questi anni:

<arnaud_> does autoload have a performance impact when using apc ? 
<Rasmus_> it is slow both with and without apc 
<Rasmus_> but yes, moreso with apc because anything that is autoloaded is pushed down into the executor 
<Rasmus_> so nothing can be cached 
<Rasmus_> the script itself is cached of course, but no functions or classes 
<Rasmus_> Well, there is no way around that 
<Rasmus_> autoload is runtime dependent 
<Rasmus_> we have no idea if any autoloaded class should be loaded until the script is executed 
<Rasmus_> top-level clean deps would speed things up a lot 
<Rasmus_> it's not just autoload 
<Rasmus_> it is any sort of class or function declaration that depends on some runtime context 
<Rasmus_> if(cond) function foo... 
<Rasmus_> if(cond) include file 
<Rasmus_> where file has functions and classes 
<Rasmus_> or heaven forbid: function foo() { class bar { } } 
+1

Conserva ancora su PHP5.3? Mi piacerebbe vedere alcuni punti di riferimento o qualcosa a sostegno di questo o di un articolo o qualcosa del genere! – Alfred

+0

Questo è il benchmark più completo fino ad oggi che potrei trovare - http://weierophinney.net/matthew/archives/245-Autoloading-Benchmarks.html – seven

5

Ho aggiunto altro googling e ho trovato questo interessante article riassunte qui di seguito:

benchmark sono stati eseguiti 10 volte per ogni strategia:

enter image description here

Conclusione

Ogni approccio ha i suoi meriti. Durante lo sviluppo, non è necessario eseguire necessariamente uno script per generare la mappa delle classi o aggiornare manualmente la mappa delle classi ogni volta che si aggiunge una nuova classe. Detto questo, se ti aspetti un sacco di traffico sul tuo sito, è banalmente facile eseguire uno script durante la distribuzione per creare la mappa delle classi per te, e quindi lasciare un po 'di prestazioni extra dalla tua applicazione.

Problemi correlati