performance-codice-php-mysql

Ottimizzazione codice: copia/incolla? Sì, ma con consapevolezza

Scritto il

Se siete degli sviluppatori avrete sicuramente almeno una volta copiato e incollato del codice pre esistente nel vostro progetto, per aggiungere funzionalità o migliorarlo.
Vi sarà capitato di aver bisogno di qualche funzione particolare e avrete pensato “Piuttosto che perderci ore a svilupparlo da me, meglio prenderlo già pronto!“. Ben venga, sicuramente questo è uno dei benefici di essere uno sviluppatore moderno e di ottimizzare i tempi!
In altri casi state semplicemente riprendendo una vecchia funzione creata in passato e riportandola in un nuovo progetto, sempre per risparmiare tempo.

Ma fate attenzione! Che vi troviate nel primo o nel secondo caso, il mio consiglio è di leggere attentamente il codice che state inserendo nel vostro progetto, perché sebbene si possa trattare di codice scritto dal più competente ed esperto sviluppatore può contenere pezzi di codice a voi inutili o addirittura (nel caso di codice d’esempio su qualche forum o documentazione) mancare di controlli di sicurezza e ottimizzazione performance.

In questo articolo parlerò in particolare del secondo caso: copia/incolla da codice vecchio, perché ne ho avuto a che fare in prima persona in questi ultimi giorni, e vorrei condividere questa esperienza sperando possa essere utile a qualcun’altro.

Dovendo sviluppare un’estensione di una sezione pre esistente (per i curiosi stavo sviluppando un plugin AMP Google per una sezione meteo) ho avuto la buona idea di recuperare il vecchio codice, attualmente online nella sezione originale, e di riutilizzarlo nel nuovo progetto.
Sarà per il fatto che per 200px effettivi di ingombro sulla pagina mi son trovato a copiare ben 600 righe di codice, o perché ho già avuto a che fare con situazioni del genere, mi son messo a leggere il codice per vedere cosa effettivamente succedeva in quella marea di codice.

Ciò che mi son trovato di fronte, a primo sguardo, era del codice complicato che faceva più di 5 query al database di cui 2  stavano dentro una serie di cicli foreach. In totale c’erano 6 cicli foreach e una decina di costrutti condizionali if e qualche switch.
Sottolineo comunque che il fatto che ci siano un’alto numero di query, cicli e costrutti particolari non significa che ci troviamo di fronte a del codice mal scritto, ma è un buon segno. Sopratutto se poi l’indentazione è lasciata al caso.

codice-indentazione

Perciò, dopo un paio di caffè e qualche ora di studio del codice e riorganizzazione ho ottenuto un blocco di poco più di 200 righe con 1 sola query joined e 1 solo ciclo foreach, ottenendo lo stesso risultato finale.
Inutile dire quanto il server si sia alleggerito dopo questa modifica, e lo stesso vale per il database.

Come consiglio personale tenete conto che un database di tipo MySQL lavora meglio con poche query, anche se grosse, perciò ogni volta che potete unite le query minori in query uniche, tramite l’uso di join (su campi indicizzati!), e pensate alle performance!