HomeBlogOttimizzazione sito Web – Analisi Tempo C (Elaborazione)

Ottimizzazione sito Web – Analisi Tempo C (Elaborazione)

Scritto il -   - Massimo Della Rovere

Nei primi siti internet che ebbi la fortuna di lavorare il 90% del lavoro consisteva nella creazione di pagine statiche HTML e qualche immagine di decorazione, quindi il grosso del lavoro del server web era quello di distribuire dei file statici. Le cose ovviamente sono cambiate ed oggi è difficile sviluppare un sito web che non necessiti di elaborazioni come PHPASP etc, basti pensare al numero di blog che usano wordpress e quindi php e database mysql per la memorizzazione. Quindi, continuando con il nostro schema generale delle perfomance, chiameremo questa zona Analisi di Tempo (C) che rappresenta il tempo necessario da quando il web server delega l’elaborazione della pagina ad un modulo di scripting a quando quest’ultimo finisce la sua elaborazione.

Schema generale per la zona di tempo (C)

Per migliorare questa zona di tempo è renderla meglio performante bisogna tenere conti dei vari aspetti esistenti che incidono sull’esecuzione di un codice di scripting come ad esempio PHP. Il primo componente che dovremo controllare è il modulo che collega il server web con l’interprete dei comandi e quindi l’esecuzione dello script, il secondo componente è la compilazione e l’esecuzione del codice da parte del core PHP mentre l’ultimo componente è rappresentato da tutte le risorse esterne che vengono usate con altri pacchetti software come ad esempio un database MySQL, una libreria per la manipolazione di immagini ed altro ancora.

Nella prima parte dello schema vedete che il server web è collegato ad un modulo specifico che a sua volta lo collega con il core dello scripting da eseguire, questi tre componenti sono gli unici che sono sistema operativi dipendenti, quindi se uso ad esempio apache con php su linux dovrò installare un modulo ed un core differente se ad esempio installo apache su windows. La stessa cosa se non uso apache avrò lo stesso core di scripting ma un modulo diverso per il web server. Questo schema ci fà capire che le performance che riguardano questa sezione non dipendono da noi ma dalla qualità del software sviluppato per quella architettura particolare, infatti anche se il risultato sembrerebbe lo stesso su alcuni sistemi operativi potremmo avere delle performance migliori rispetto ad altri, questo per motivi complessi legati alla gestione di memoria, cpu ect.

Scelta del modulo

Ad esempio per PHP non esiste un unico modulo da installare, ma ci sono diverse soluzioni che gestiscono il collegamento tra il web server e il core in maniera differente, non esiste un modulo migliore di un’altro in assoluto, ne tanto meno più performante, però la scelta giusta in base alle proprie esigenze può fare la differenze negli aspetti che desideriamo. Vi consiglio la lettura di questo articolo per chiarimenti – Come cambiare il vostro gestore PHP.

Esecuzione codice PHP

A prescindere dalla scelta del modulo, del sistema operativo od altro, in questa fase il nostro gestore PHP si trova a dover analizzare una serie di righe di codice presenti nel file specificato nella richiesta, compilare il tutto ed eseguire. Ovviamente, cerchiamo di tenere presente che più rendiamo complesso il nostro programma e più tempo di CPU ci servirà per la sua esecuzione completa. Cerchiamo di utilizzare meno codice possibile, memorizziamo in variabili il ritorno di una funzione invece di richiamarla centinaia di volte, usare una programmazione ad oggetti con il caricamento delle classi solo quando serve, non utilizzare codice PHP ripetitivo ma creare classi o funzioni specifiche, non abusare di comandi SQL o chiamate a funzioni che necessitano di elevato utilizzo di CPU. Se volete controllare dove il vostro programma utilizza maggiore memoria o CPU potete inserire alcuni comandi specifici e vedere le informazioni che vi interessano:

// Prima e dopo dell'esecuzione dello script
echo memory_get_usage();

WordPress o CMS

Se utilizzate WordPress od altro CMS, cercate di non utilizzare troppi plugin, in quanto è facile trovarsi nella condizione di utilizzare tanta memoria e un eccessivo uso di CPU, non scegliete plugin che fanno mille funzioni, ma scegliete quelli che hanno ciò che vi serve. Molte volte consiglio anche sulla situazione contraria, e cioè non installate plugin che fanno delle funzioni elementari che possono essere svolte con due righe di codice, imparate a trovare i codici che desiderate su internet ed implementateli direttamente nel vostro tema. Se volete controllare le info di utilizzo dello script su wordpress potete aggiungere questo:

// Prima e dopo dell'esecuzione dello script
echo memory_get_usage();
echo timer_stop(0);
echo get_num_queries();

Database MySQL

Se utilizzate un database per memorizzare e leggere i vostri dati, le relative performance saranno influenzate notevolmente da questo aspetto. Infatti un’istruzione SQL è qualcosa di molto più complessa di un’istruzione PHP, eseguire un comando SQL significa richiamare un’altro software che dovrà elaborare la relativa richiesta e tornare indietro il risultato al programma PHP, se il server del database risiede sulla stessa macchina, quindi in localhost, i tempi di rete saranno bassi altrimenti bisognerà aggiungere al tempo di elaborazione anche la latenza di rete per far viaggiare sia la richiesta che i record di risposta. In poche parole la configurazione del database e il numero delle richieste necessarie alla visualizzazione di una pagina web sono l’aspetto più importante per abbassare il tempo di risposta. L’ottimizzazione di un database è una cosa molto complessa e non può essere spiegata con poche parole, vi consiglio di cercare in internet argomenti del tipo “ottimizzazione mysql”, “migliorare performance database” ect per avere un’idea.

Per quanto mi riguarda una cosa sicuramente da fare è quella di attivare il sistema di caching per il database, in maniera tale che non tutte le stringhe di richiesta SQL vengano eseguite ed elaborate completamente, ma a fronte di una nuova richiesta già eseguita in precedenza, viene ritornato immediatamente il risultato già presente in memoria. Se utilizzate il database MySQL il motore più utilizzato ad oggi con PHP potete usare queste direttive di configurazione, ho preso i valori e le descrizioni dal sito HTML.it che consiglio vivamente a tutti:

Query_cache_size: Questa direttiva può essere impostata grande a piacere secondo la disponibilità di Ram di sistema. Più grande è maggiore sarà l’incremento nelle prestazioni. È necessario però non esagerare perché un valore troppo elevato in percentuale sulla quantità di Ram (ad esempio il 50%) causerà l’utilizzo del paging e quindi si vanificherà l’uso della cache.

Query_cache_limit: Questa direttiva indica la dimensione massima della query memorizzabile in cache. Una query con una dimensione troppo elevata non riceverà vantaggi dal caching perché verrà presto eliminata dalla cache per fare spazio ad altre query.

Query_cache_min_res_unit: Questa direttiva imposta la dimensione minima delle query memorizzabili in cache. Generalmente il valore di default è ottimo.

Query_cache_type: Questa direttiva permette di decidere se il sistema di caching dovrà funzionare sempre (1), su richiesta della singola query (2) o mai (0).

Indice generale della guida ottimizzazione sito web

Autore:
Massimo Della Rovere
Articoli:
140
Website:
http://startbyzero.com/
Nato a Roma nel 1968, appassionato di informatica, programmatore e sistemista su IBM iSeries, esperto in procedure web con PHP e MySQL, grande utilizzatore dei prodotti Google, Linux, Wordpress ed Amazon AWS. Attualmente vive in Perù nella città di Lima, da dove porta avanti il suo progetto favorito riguardante il blog multitematico di startbyzero.com. Per contattarlo basta seguirlo sul profilo pubblico presente nel social network di google+.

Scrivi un tuo commento o qualche consiglio