2009-12-21 13 views
9

Un numero di framework utilizza spl_autoload_register() per il caricamento dinamico delle classi (ovvero controller e modelli). Ci sono un paio di post sul problema del caricamento automatico e del caching opcode. Un messaggio, in particolare, ha una risposta da @ Cletus che fa riferimento @Rasmus fare una serie di dichiarazioni che rivelarsi sgradevole per coloro che utilizzano APC come una cache codice operativo:Framework PHP5: caricamento automatico e memorizzazione nella cache Opcode

Non sembra essere qualsiasi discussione su eventuali alternative al caricamento automatico che non influiscono sulle prestazioni della cache opcode.

C'è un modo per aggirare il fatto che le classi caricate automaticamente non vengono aggiunte alla cache del codice byte?

In caso contrario, esistono metodi alternativi per il caricamento dinamico delle classi che verranno memorizzate nella cache?

+4

da quello che mi ricordo dei miei giorni di Mediawiki + APC, classi auto-caricato avranno cache da APC. – jldupont

+0

@jldupont - Ho appena aggiornato per fare riferimento a una risposta specifica che mi ha incuriosito a scrivere questo post. –

risposta

5

Sembra esserci ancora confusione su questo argomento, tuttavia nella maggior parte dei casi si tratta di semplificare le prestazioni.

Una buona mailing list filo di leggere sarebbe questo uno su Zend Framework mailing list:

http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html

Ora, la correlazione è qui perché se si eredita dalla non-ancora-definito class , si potrebbe fare affidamento su autoload per definirlo (sebbene si possa anche fare riferimento a basandosi sull'inclusione), e in realtà la presenza della funzione di caricamento automatico potrebbe incoraggiare l'utente a utilizzare tale ereditarietà. Ma questo non è il caricamento automatico che causa problemi (vedi dopo Ramus "non è solo il caricamento automatico" nel blog per alcuni esempi di cose fastidiose). Quindi la frase corretta sarebbe "le persone che tendono ad affidarsi all'autoload tendono a anche a utilizzare il codice che sfida l'associazione in fase di compilazione". Quale non può essere visto come errore autoload, naturalmente, e solo evitando il caricamento automatico non aiuterà un bit con quello - si dovrebbe anche riscrivere il codice in modo che potrebbe avvenire il binding in fase di compilazione . E non ha nulla a che fare con gli usi del caricamento automatico con "nuovo", per esempio.

quanto riguarda il rallentamento dagli effetti sopra descritti - Per esempio, l'assenza di la fase di compilazione vincolante - il codice diventa effettivamente un po 'più lento e tale codice può portare in alcuni casi oscuri alcuni problemi nel cercare cache opcode (non nei casi di caricamento automatico, ma nei casi in cui le classi sono definite all'interno di condizioni, o, Dio non voglia, viene creata una definizione diversa a seconda delle condizioni) - ma non ha quasi niente a che fare con l'uso dell'autoportazione da solo. La quantità di rallentamento, tuttavia, sembrano essere notevolmente exagerrated da persone - non è nulla (e ripeto per essere chiari - NIENTE) rispetto a tutto vantaggio delle prestazioni proposta dal cache del codice operativo per l'assenza del operazioni su disco e fase di compilazione. Probabilmente potresti comporre un benchmark artificiale che mostrerebbe un significativo rallentamento dello , ma non credo che nessuna applicazione reale possa nemmeno accorgersene.

fonte:http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html#a640092

+2

[collegamento aggiornato] (http://osdir.com/ml/php.zend.framework.general/2007-01/msg00132.html) alla citazione completa. – Xeoncross

Problemi correlati