2011-10-14 20 views
21

La mia applicazione Web corrente utilizza circa 30 Contants (DEFINE()). Sto leggendo cose che le variabili sono più veloci. A condizione che esista una convenzione di denominazione per evitare le sovrascritture di variabili, l'unico altro inconveniente che vedo è che queste variabili dovrebbero essere definite come variabili globali e in che modo in ogni funzione.Quale è più veloce? Costanti, variabili o array di variabili

Quale è più veloce? Uso costanti di queste costanti per tutta la mia applicazione e probabilmente aggiungerò sempre di più alla lista e verranno utilizzate all'interno e all'esterno di funzioni e classi.

+15

"L'ottimizzazione prematura è la radice di tutti i mali". Dimmi, se puoi _ misurare qualsivoglia differenza;) – KingCrunch

+4

Il tempo risparmiato è così sottile che non vale davvero la pena considerarlo. –

+0

quando varrebbe la pena questa ottimizzazione? C'è un costo per ogni volta che fai riferimento alla costante? Ed è più che quando fai riferimento a una variabile? queste 30 costanti sono di riferimento 100 su ogni pagina. – David

risposta

23

Le costanti definite utilizzando define() sono piuttosto lente in PHP. Le persone hanno effettivamente scritto estensioni (come hidef) per migliorare le prestazioni.

Ma a meno che non si abbiano un sacco di costanti, questo non dovrebbe fare molta differenza.

A partire da PHP 5.3 è anche possibile utilizzare costanti in fase di compilazione utilizzando const NAME = VALUE;. Quelli sono molto più veloci.

+4

Quale sarebbe la tua definizione dei carichi? Ne ho circa 30 a cui sono riferiti 100 di volte per pagina – David

+1

@David 30 non sono molto. I problemi possono sorgere solo con centinaia di costanti. – NikiC

11

La differenza sarebbe davvero piccola (micro ottimizzazioni). È meglio incapsulare alcune delle tue costanti nelle classi in modo che tu possa accedervi tramite Classname::CONSTANT per non inquinare lo spazio dei nomi globale della tua applicazione.

-1

Non riesco nemmeno ad immaginare che qualsiasi differenziale di velocità sarebbe consequenziale. Ciò che è certamente vero è che le variabili sono molto più facili da usare delle costanti in molti casi.

Tuttavia sembra che il tuo vero problema sia che si dispone di una serie di dati di configurazione e si desidera evitare di dover passare carichi di variabili alle funzioni o di renderli globali.

Non esiste una risposta che funzioni per tutti, ma una soluzione popolare è utilizzare una classe di registro o crearne una da soli. Puoi farlo abbastanza facilmente dichiarando un array php. Quindi si inizializza l'oggetto del registro e le funzioni e le classi accedono tramite una chiamata al metodo statico. Piuttosto che fornire frammenti di codice, mi limiterò a fare riferimento a zend_config e zend_registry come esempi. Mentre ZF fornisce questi, non dovresti aver paura di pubblicare le tue versioni, poiché nessuno dei due è particolarmente difficile da ricreare in una forma più semplice se vuoi evitare l'uso di ZF nel tuo progetto.

7

Una prova pratica ha mostrato che definiscono costanti (define('FOO', 'bar');) è di circa 16 a 18 volte più lento di definizione di una variabile ($foo = 'bar';), ma utilizzando il definito (costante) è circa da 4 a 6 volte più veloce.

Problemi correlati