Utili consigli su come ottimizzare al meglio il codice PHP

php-logo

Avevo già parlato di ottimizzazione, ma lo avevo fatto a livello di database.

Come sostengo spesso, tra scrivere codice e scrivere buon codice passa una differenza non da poco. Insomma, a scrivere codice son capaci tutti o quasi, a scrivere del buon codice son capaci solo i Programmatori con la P maiuscola.

Nel caso del Php, come per tutti i linguaggi di programmazione orientati agli oggetti, con alcuni accorgimenti è possibile riuscire a scrivere codice PHP performante. E codice performante significa uno script che può essere eseguito in modo ottimale dall’interprete con conseguente risparmio di risorse preziose e tempo di esecuzione.

Logicamente, restringere ad un semplice articolo i consigli per riuscire a scrivere codice php performante può sembrare ottimistico, ma alcuni spunti interessanti posso darveli anche perché si tratta, come leggerete a breve, di consigli su situazioni che in php capitano molto spesso.

Loop e Funzioni

Le iterazioni in php sono costituite da sintassi abbastanza semplice. Laddove è possibile, cercate di non invocare funzioni all’interno dei loop poiché ogni chiamata ad una funzione obbliga il parser ad eseguire dei controlli che allocano inutile memoria con rallentamento dei tempi di esecuzione dello script.

A questa forma scorretta :

for($i = 0; $i < count($array); $i++) {
...
}

E’ preferibile la forma esatta :

$n = count($array);
for($i = 0; $i < $n; $i++) {
...
}

La funzione count, in sostanza, meglio tenerla fuori dal loop perché altrimenti verrà eseguita ad ogni ciclo.

Pre Incremento e Post Incremento

In PHP, occorre sapere che il post-incremento (del tipo $i++) è un’operazione che risulta più lenta rispetto al pre-incremento (del tipo ++$i).

Infatti, il post-incremento prevede prima la creazione di una variabile temporanea che solo successivamente è incrementata. A differenza, il pre-incremento agisce direttamente sulla variabile corrente. Stesso discorso vale per il decremento.

Apici ed Apostrofi

Teniamo bene a mente questa sola differenza: all’interno degli apici doppi si possono inserire delle variabili, all’interno degli apici singoli no. Vediamo un esempio per capire meglio :

$numero=5;
echo "Questo è il numero $numero"; //con apici doppi
echo 'Questo è il numero $numero'; //con apici singoli

Allora, il primo echo darà come risultato di stampa :

Questo è il numero 2

In tal caso, cioè con gli apici doppi, la variabile $numero viene inserita correttamente.

Il secondo echo invece stamperà :

Questo è il numero $numero

Come si vede, in questo caso la variabile $numero non viene inserita nella frase, ma viene stampato proprio la parola $numero.

Dopo un esempio del genere, vien subito da pensare che conviene sempre usare gli apici doppi, ma non è vero assolutamente.

Quando php incappa negli apici doppi, si aspetta che all’interno ci siano variabili e quindi esegue un controllo (che richiede tempo…).

Quando invece php trova gli apici singoli, stampa tutto quello che trova all’interno degli apici, senza sprecare tempo a cercare variabili.

Morale della favola : se dovete stampare solo testo, senza alcuna variabile in mezzo, potrebbe essere più conveniente usare gli apici singoli anziché doppi.

echo Vs print

In apparenza, trattasi di sono due funzioni identiche che servono per stampare contenuti in php. In realtà hanno una piccola differenza poiché echo non è una vera funzione, al contrario di print. Quest’ultima restituisce un valore booleano dopo essere stata eseguita, mentre echo restituisce l’output e basta.

Ecco perché echo è più veloce di print nel restituire l’output. Parliamo di tempi risparmiati irrisori, ma si sà che in un’applicazione di migliaia di righe di codice tutto fa brodo.

Concatenare le stringhe

Tanto per riprendere il discorso sulla funzione echo, c’è anche un altro vantaggio nell’utilizzarla. Invece di utilizzare la classica concatenazione delle stringhe con funzione specifica (solito parser al lavoro e spreco di risorse), potrete semplicemente sfruttare la caratteristica di  echo() per passare vari parametri, che verranno stampati in sequenza.

Quindi, al posto di scrivere :

echo(‘Ciao ‘ . $nome);

meglio scrivere

echo(‘Ciao ‘ $nome);

Connessione Database

Ecco un’altra operazione abbastanza frequente nei nostri progetti php : la connessione al database. Uno dei motivi alla base del crash di alcune applicazioni scritte in php (il discorso non cambia per altri linguaggi come Java, ad esempio) sta proprio in un errato modo di impostare questo tipo di operazione.

Infatti, dopo avere aperto una o più connessioni verso un database, occorre sempre ricordarsi di concludere l’operazione con la chiusura della stessa (o delle stesse) perché esiste sempre un limite di connessione e se la vostra applicazione si blocca spesso la causa potrebbe risiedere in una non corretta chiusura delle connessioni. In tal caso, raggiunto il limite, ogni nuova richiesta di connessione verrà negato.

Gli Array

Spesso ci si ritrova a dover cercare un elemento all’interno di un array. Molti sviluppatori sfruttano la funzione in_array() o eseguono un ciclo for per scandire l’intero array ed eseguire i confronti del caso.

Ma, se non lo sapete, non sono due soluzioni molto performanti poiché esiste una soluzione più efficiente.

Infatti, gli array sono memorizzati all’interno di hash tables, con le famose associazioni chiave-valore. Siccome la ricerca diretta nelle hash tables è molto più veloce rispetto alle altre operazioni, potrete velocizzare il processo di ricerca all’interno degli array tramite il costrutto isset().

Ho tenuto, volutamente, fuori da questo discorso l’argomento php e chaching..troppo dettagliato e complesso per esser dibattuto in uno spezzone di articolo.

1 Commento all'articolo

  1. Carlo - 1 luglio 2010

    Ciao, grazie per l’articolo molto interessante :) Applicherò sicuramente i tuoi consigli. Forse c’è una svista nel paragrafo di echo vs print:
    echo(‘Ciao ‘ $nome);
    credo che manchi una virgola:
    echo(‘Ciao ‘, $nome);

Lascia un commento