I linguaggi di programmazione orientati agli oggetti (OOP) sono un compromesso tra facilità di manutenzione del codice (semplice riuso, maggiore modularità) e il carico di lavoro sulla CPU.

Consigli per ottimizzare il codice PHP

Se cercate solo prestazioni, esistono soluzioni differenti ai linguaggi OOP. Ma con alcuni accorgimenti è possibile anche scrivere codice PHP performante, che può essere eseguito in modo ottimale dall’interprete e che consente di risparmiare risorse preziose e tempo di esecuzione.

In questo articolo scopriamo quali sono i trucchi, poco conosciuti dagli stessi “addetti ai lavori”, che potranno rendere il vostro lavoro più semplice e veloce: 9 consigli per ottimizzare codice PHP.

Funzioni e Loop

Dove possibile, non richiamare funzioni all’interno dei loop. Ogni chiamata a funzione obbliga il parser ad eseguire controlli, allocare memoria e quindi a rallentare i tempi di esecuzione dello script. Ad esempio…

SBAGLIATO:

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

CORRETTO:

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

Lunghezza delle stringhe

Per ricavare la lunghezza delle stringhe gli sviluppatori utilizzano spesso e volentieri la funzione strlen(). Questa funzione è molto veloce in quanto non esegue alcun calcolo, ma ritorna semplicemente un’informazione inserita nella struttura zval (struttura dati C, usata dal motore PHP).

In ogni caso, essendo una funzione, il parser PHP deve comunque eseguire alcune operazioni di “lookup” all’interno delle classi, per cercare strlen() e le sue definizioni.

Per evitare questi passaggi, è molto più conveniente usare il costrutto isset().

SBAGLIATO:

if (strlen($stringa) < 5) { echo "La stringa è troppo corta"; }

CORRETTO:

if (!isset($stringa{5})) { echo "La stringa è troppo corta"; }

Lo stratagemma consiste nell’utilizzare isset() (che a differenza di strlen() non è una funzione e dunque non richiede un lookup) per controllare l’esistenza del 5° carattere all’interno della stringa. Facile, no!?

Pre-incremento vs Post-incremento

In PHP, il post-incremento (es. $i++) è un’operazione più lenta del pre-incremento (es. ++$i), e lo stesso discorso vale per il decremento.

Il post-incremento ($i++) prevede la creazione di una variabile temporanea, che viene poi incrementata. Mentre il pre-incremento agisce direttamente sulla variabile corrente.

Questa è una delle tipiche ottimizzazioni effettuate dagli opcode systems per PHP (Zend, eAccelerator, phpAccelerator, etc).

Apostrofi e Apici

Per stampare stringhe in PHP che non contengono variabili, è meglio utilizzare gli apostrofi singoli (es. echo 'ciao'). Se invece si utilizzano gli apici (es. echo "ciao"), il motore PHP ricerca all’interno della stringa eventuali variabili.

All’interno degli apici, infatti, è possibile inserire variabili che vengono stampate dall’interprete (es. echo "ciao $nome").

Per ottimizzare il codice PHP, è bene fare attenzione anche a questo aspetto.

print vs echo

print() e echo() sono due costrutti del linguaggio PHP, dunque non presentano gli svantaggi delle funzioni definite “esternamente”. In ogni caso, print() risulta più lenta di echo()… questo perchè la funzione print() ritorna anche un’indicazione booleana sul successo dell’operazione, mentre echo() si limita a stampare.

Per ottimizzare il codice nelle fasi di stampa, utilizza echo() al posto di print()!

printf

Ancora parlando della stampa di stringhe in PHP, dovete sapere che la funzione printf() è poco performante… infatti printf() è progettata per gestire vari schemi di formattazione, che per la maggior parte non sono necessari in un linguaggio detipizzato che esegue automaticamente la conversione dei tipi.

Dunque, se non avete bisogno delle sue funzionalità, scegliete un costrutto diverso per stampare.

Concatenazione delle stringhe

Un vantaggio importante deriva anche dall’utilizzare i multi-parametri della funzione echo(). Invece di utilizzare la concatenazione delle stringhe, che richiede al parser un certo lavoro, è sufficiente sfruttare la caratteristica del costrutto echo() per passare vari parametri, che verranno stampati in sequenza.

SBAGLIATO:

echo('Ciao ' . $nome);

CORRETTO:

echo('Ciao ', $nome);

Ricerca negli array

Per cercare un elemento all’interno di un array, gli sviluppatori sfruttano la funzione in_array() o eseguono un ciclo for per scandire la struttura ed eseguire i confronti del caso.

Esiste una soluzione più efficiente, che peraltro abbiamo già affrontato in questo articolo, e che permette di risparmiare risorse preziose e ancora una volta… tempo di esecuzione!

Gli array vengono memorizzati all’interno di hash tables, con associazioni chiave-valore. Essendo la ricerca nelle hash tables più veloce rispetto ad altre operazioni, è possibile velocizzare il processo di ricerca all’interno degli array, semplicemente sfruttando il costrutto isset().

SBAGLIATO:

$pappa = array("pasta", "pizza", "carne", "frutta");
if (in_array('dolce', $pappa)) {
    echo 'E il dolce?';
} else echo 'ecco, meglio!';

CORRETTO:

$pappa = array("pasta" => 1, "pizza" => 1, "carne" => 1, "frutta" => 1);
if (isset($pappa['dolce'])) {
    echo 'E il dolce?';
} else echo 'ecco, meglio!';

In questo caso è obbligatorio usare array associativi.

Caching

Gli script PHP vengono re-interpretati ogni volta che vengono chiamati… a meno che non siano in cache. Utilizzare un sistema di caching PHP permette di incrementare le performance in modo significativo.

Se avete altri suggerimenti da consigliare per ottimizzare il codice PHP e rendere più veloce l’esecuzione degli script, siamo tutt’orecchi…

Ti è piaciuto l'articolo? Vota Ok oppure No. Grazie Mille!
Condividi la notizia su Facebook e Twitter. Grazie Mille!
Condividi su Facebook Condividi su Twitter Condividi su Delicious Condividi su Digg