Ottimizzare e velocizzare una pagina PHP
Questo articolo voleva essere semplicemente una serie di consigli su come velocizzare l’esecuzione di una pagina PHP grazie ad alcune scelte di sintassi e ai comandi utilizzati. Pian piano, però, parlando con colleghi programmatori, è emerso chiaramente che ci sono ben altre verifiche da fare, a livello di design del nostro codice, per avere variazioni davvero significative nelle prestazioni.
Da bravi programmatori quali vogliamo diventare, nel resto dell’articolo vediamo sia le une che le altre.
Modifiche piccole
Ci sono una serie di velocizzazioni che dipendono strettamente dall’implementazione dell’interprete PHP, e che quindi dobbiamo prendere per buone così come sono. Ad esempio:
- echo è più veloce di print. Quindi, ogni qualvolta sia possibile, preferire il primo.
Altre sono più ovvie anche per un non esperto, ad esempio:
- mentre le stringhe nelle virgolette doppie (“) vengono interpolate, ovvero analizzate alla ricerca di variabili da sostituire con il relativo valore, le stringhe nelle virgolette singole, o apici (‘) vengono prese così come sono, senza interpretazione. Quindi ogni volta che non ci serve l’interpolazione usiamo le virgolette singole; anche se la differenza, grazie all’intelligenza dell’interprete, non è clamorosa.
E ancora. Come saprete, il codice PHP si mischia all’HTML, nel senso che una normale pagina PHP può comprendere anche una parte scritta direttamente in HTML. In alternativa, è possibile generare del codice HTML con il comando echo (o print, ma ormai sapete che è meglio echo). Ma:
- è più veloce se si chiude il PHP e si scrive dell’HTML diretto (es. …?><div><p>…</p></div><?php … ) rispetto a far generare l’HTML dal PHP (es. echo ‘<div><p>…</p></div>’)
Modifiche medie
Non sono così immediatamente ovvie, ma sono comunque alla portata di tutti. Sono numerose: vediamone alcune.
- Attenzione alle funzioni che vengono richiamate ad ogni ciclo, quali l’inizializzazione di una variabile o il conteggio di un array. Un ciclo che inizia con
for i = 1 to count($array)
farà il conteggio della lunghezza dell’array ad ogni passaggio. Se invece noi lo calcoliamo una riga prima di iniziare il ciclo, saremo più agili.
- Per ottenere uno stesso risultatto, usare le funzioni native di PHP anzichè crearne di nostre è probabilmente una scelta migliore. Ci sono ottime possibilità che una funzione nativa sia già stata ottimizzata e meglio integrata con il core, rispetto a qualcosa di creato da zero.
Modifiche grandi
Come dicevamo all’inizio, ci sono delle verifiche da fare a un livello ben diverso rispetto a quanto scritto finora. Le modifiche fin qui elencate sono delle buone abitudini. Per fare un paragone, è come dire che con i finestrini abbassati una automobile è leggermente meno aerodinamica e consuma più benzina. Vero. La variazione, però è minima. Una cilindrata 1.2 non consumerà mai come un 2.0.
Per cambiare la cilindrata delle nostre applicazioni web, dobbiamo analizzare molto attentamente il nostro flusso di lavoro, e possibilmente essere creativi. Potremmo aver inserito una query inutile o che reperisce molti più campi o record del necessario. Potremmo aver inserito una chiamata a una funzione che però in certi casi è inutile, per cui con un piccolo controllo risparmiano un bel po’ di elaborazione. E così via.
La differenza qui, per rimanere nel paragone automobilistico, è quella tra un’autostrada dritta e una statale tutta curve e semafori. E’ a questo livello che si fanno le grosse differenze e – solitamente – in pochi punti essenziali.
Per fare bene questa parte bisogna avere ottime capacità di analisi (quindi ora avete capito a cosa serve il ruolo di “Analista/programmatore”, vero? Diciamoci la verità, ci immaginavamo tutti un tizio in camice bianco davanti a un server con schede perforate, e non capivamo bene quale lontana parentela lo legasse agli hacker moderni che tutti conosciamo 🙂 ).
Bevete un caffè, rimboccatevi le maniche, e buona ottimizzazione.