2013-01-29 7 views
6

Ho avuto una sezione in una classe che ho deciso di dividere in una nuova.

Quando ho portato la sezione di codice in una nuova classe, ho notato che era molto più lento nell'eseguire uno dei cicli di foreach.

Sono riuscito a rintracciare parte del problema per essere come ho deciso di salvare la matrice del risultato finale.

penso che sarà più facile da capire se si vede una versione abbreviata del mio codice:

Il codice porting originale: http://pastebin.com/2iBuqmgn codice porting più ottimizzato: http://pastebin.com/TYU1rHwU

Vedrai che in il primo esempio manipolo $ this-> active_topics direttamente fino in fondo.

Mentre nel secondo esempio utilizzo variabili locali prima di salvare la variabile locale su $ this-> active_topics DOPO il ciclo foreach.

Con l'originale un loop sembrava essere in media a 1 secondo, mentre quello più ottimizzato utilizza 0,85 per eseguire in media. Finiscono per restituire esattamente lo stesso contenuto.

Perché il codice più ottimizzato, con l'uso di variabili locali, è più efficiente?

risposta

12

Quando si accede a qualcosa in una classe, l'interprete PHP deve prima trovare la classe in memoria e quindi cercare dove si trova l'attributo. Su una variabile locale semplice non ha bisogno di cercare l'attributo all'interno della classe, può solo accedere direttamente alla memoria della variabile e quindi è un po 'più veloce.