SlideShare a Scribd company logo
XHProf
Aumentare le prestazioni di
un’applicazione PHP attraverso la
profilazione con XHProf.
Intesys, 13 Ottobre 2011
Problema: le prestazioni di PHP
Come sappiamo PHP è un linguaggio con prestazioni poco elevate, questo perché :
- un linguaggio interpretato
- non è tipizzato


Questi 2 fattori fanno sì che le prestazioni siano scarse.




                                            Intesys Talk
Conoscere gli strumenti
Esistono varie tecniche e strumenti per migliorare notevolmente questo aspetto, alcuni servono
solo a valutare dove migliorare altri intervengono più in profondità.


Citazione di Theo Schlossnagle*
- Gli strumenti sono solo strumenti
- Sono essenziali per fare bene il tuo lavoro
- Non potranno mai fare il lavoro al posto tuo
- Non potranno mai rimpiazzare esperienza e disciplina
- Possono aiutarti a tenere disciplinato il tuo lavoro


Abbiamo strumenti come i profilatori (PHPSpeed, XHProf, ecc.),
che servono a misurare le prestazioni;
mentre abbiamo altri strumenti come quelli per il caching
(MemCache, xCache, ecc.) oppure di modifica del codice
come Facebook Hip Hop (prende codice php e lo compila in C++, aumento delle prestazioni
della cpu del 50%).


 * CEO di OmniTI

                                           Intesys Talk
Che cos’è la profilazione?

La profilazione è un sistema di analisi dinamico di applicazioni, i cui dati si ottengono dalle
esecuzioni dell'applicazione.

L'obiettivo di questo tipo di analisi è di determinare quali sezioni dell'applicazione sono da
ottimizzare, aumentando la velocità complessiva o
diminuendo l'utilizzo di memoria, o magari entrambi.




                                            Intesys Talk
Misurare le prestazioni
di un’applicazione PHP
Molto spesso gli sviluppatori pensano di sapere quali parti della loro applicazione la rende lenta
e spendono molto tempo nell'ottimizzazione di quella parte ma magari capita che il collo di
bottiglia si trova da qualche altra parte.


Per evitare questo problema si possono utilizzare degli strumenti detti profilatori.


Di questi strumenti ne esistono parecchi, soprattutto per PHP, il più utilizzato è Xdebug che
combinato con WinCacheGrind permette di mostrare il grafico delle chiamate e il tempo speso
per ogni funzione.




                                            Intesys Talk
XHProf

XHprof è un altro tool, sviluppato da Facebook ed è open source.
E' un profiler di tipo “a gerarchia di funzioni” scritto in C.

E' dotato di un'interfaccia grafica per la presentazione dei dati raccolti
Permette di avere anche uno storico delle profilazioni raccogliendo i dati in una tabella del
database.

Al momento le versioni ufficiali del tool sono solo per Linux e FreeBDS.

Esiste una versione per Windows, ma sembra che non sia veritiera nei report come le versioni
per i sistemi Unix.




                                            Intesys Talk
Installazione di XHProf
Per installarla:
     wget http://pecl.php.net/get/xhprof-0.9.2.tgz
     tar xvf xhprof-0.9.2.tgz
     cd ./xhprof-0.9.2/extension/
     phpize
     ./configure --with-php-config=/usr/local/bin/php-config
     make
     make install
     make test

Poi bisogna abilitare l'estensione all’interno del file php.ini
     [xhprof]
     extension=xhprof.so
     xhprof.output_dir="/var/tmp/xhprof"

Successivamente si fa solo un semplice restart di apache.

                                              Intesys Talk
Come profilare con XHProf
Per profilare un blocco di codice basta inserire le chiamate a 2 funzioni prima e dopo:


// inizio profilazione
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
// codice da profilare
// fine profilazione
$xhprof_data = xhprof_disable();


La funzione xhprof_enable() accetta varie opzioni per controllare cosa profilare. Di default vengono
profilati sia il numero di chiamate delle funzioni che il tempo di esecuzione.
Si possono aggiungere anche le misurazioni relative alla memoria e alla CPU usate (attenzione al carico
della cpu).
Per problemi di carichi delle risorse, si possono disabilitare le funzioni native di php e le
call_user_functions.
// ignore builtin functions and call_user_func* during profiling
$ignore = array('call_user_func', 'call_user_func_array');
xhprof_enable(0, array('ignored_functions' =>                      $ignore));




                                                   Intesys Talk
Utilizzare l'interfaccia di XHProf
L'interfaccia che ci verrà mostrata cliccando sul link in fondo alla pagina è una tabella con le
funzioni ordinate per tempo di esecuzione esclusivo.
I dati che possiamo vedere sono:
- numero di chiamate per funzioni
- utilizzo di cpu (tempo esclusivo ed inclusivo)
- utilizzo della memoria (tempo esclusivo ed inclusivo)
- picco massimo di uso della memoria
- wall time (tempo di esecuzione reale)

Tempo inclusivo e tempo esclusivo.
Il tempo inclusivo rappresenta il tempo di esecuzione della funzione stessa e di tutte le funzioni
discendenti.
Il tempo esclusivo rappresenta solo il tempo di esecuzione della funzione escludendo il tempo
delle funzioni discendenti.
Wall time
Il tempo di esecuzione della funzione mentre la CPU ha altri processi in corso.



                                            Intesys Talk
Utilizzare l'interfaccia di XHProf




                     Intesys Talk
Call Graph
Un altro strumento davvero utile è il grafico delle chiamate.
XHprof mette a disposizione questa funzione attraverso uno strumento: Graphviz.
Ogni rettangolo è una funzione con le statistiche visibili nella schermata precedente.
Il colore di sfondo di ogni rettangono indica quale funzione è da ottimizzare.




                                           Intesys Talk
Ottimizzazione dell'applicazione.
Quando si inizia ad ottimizzare l'applicazione, si deve ordinare la lista delle funzioni in base al
tempo di utilizzo della CPU perchè quelle sono le funzioni che vanno ottimizzate per prime.

E' buona norma, dopo aver ottimizzato/refattorizzato le funzioni rilanciare il profiler per vedere i
progressi fatti.
Dopo che siamo soddisfatti delle ottimizzazioni fatte ordiniamo per utilizzo di memoria e wall
time.

Breve sommario per l'ottimizzazione:
- Profila
- Ordina per tempo della CPU, utilizzo di memoria e wall time.
- Parti dalla cima della lista
- Analizza e ottimizza
- Rilancia il profiler e misura i miglioramenti
- Ripeti ancora, ancora e ancora




                                             Intesys Talk
Differenze e aggregazione dei report
Altra feature molto utile di XHprof è la possibilità di aggregare più report e vedere le differenze
tra più lanci e quindi i miglioramenti.
Ogni lancio è identificato da un ID, per vedere la differenza tra 2 report basta sostituire
gli ID nel seguente URL:
http://xhprof_address/index.php?run1=XXX&run2=YYY&source=myapp




                                            Intesys Talk
Scalabilità
Se si ha la necessità di avere un'applicazione scalabile si devono preventivare degli obiettivi da
raggiungere a livello di prestazioni (utilizzo cpu, memoria, tempo di generazione della pagina,
ecc.) e conoscere i propri limiti (framework, risorse, macchina sulla quale gira l'applicazione,
ecc.).

Misurare la baseline
Per applicare questo anche a livello di profiler, un buon punto di partenza è la misurazione delle
prestazioni di base del framework della nostra applicazione.

Questo può essere utile per capire l'(in)efficienza del framework e cosa si può ottimizzare
d'esso.




                                           Intesys Talk
Scalabilità
Zend_Config

Un esempio su Zend, nello specifico i file di configurazione .ini.

Se abbiamo una variabile che si chiama “error.logger.level”, e si usa Zend_Config per accedere
al valore avremo qualcosa del genere:
$config­>error­>logging­>level
Ogni operatore “freccia” implica 2 chiamate di funzioni, per un totale di 6 chiamate di funzioni?!

Pensate se “erroneamente” lasciate quest'accesso alla variabile all'interno di un ciclo lo spreco
di risorse.




                                            Intesys Talk
Scalabilità
Zend_View
Un altro esempio su Zend (il framework che utilizziamo di più).
Quando si utilizza un helper della view lo stack di chiamate è questo:




E ancora quando si usa la funzione partial() per renderizzare un template viene clonato l'oggetto
View e annullate tutte le variabili non private.
Queste operazioni vengono fatte attraverso funzioni di reflection e ad un sacco di chiamate a
substr().
Altri oggetti come i modelli, o le chiamate alla funzione Zend_Json:encode(), mettono a dura
prova le prestazioni dell'applicazione.
Tuttavia Zend è solo un esempio di framework dalle basse prestazioni su certi componenti.


                                           Intesys Talk
Scalabilità
Identificare i colli di bottiglia
E' preferibile, nel report di Xhprof, avere più dati sulle operazioni più lente, come quelle di
accesso al disco, al database o la chiamata ad un web service.
Se non troviamo queste funzioni in cima al report è molto probabile che ci sia un collo di bottiglia
altrove e che quindi sia il caso di refactorizzare il componente o addirittura l'intera architettura
dell'applicazione ove possibile.

Prima di ottimizzare
E' buona norma, prima di andare a lavorare su parti di codice “lento” andare a fare delle
valutazioni del tipo:
- è proprio necessaria questa funzione?
- è il posto giusto per questa funzione?
- è possibile ridurre il volume di dati da processare?
Se è vero che PHP non è mister velocità noi no diamogli una mano ad essere ancora più lento!

Profilazione sotto carico
Per avere un report di dati realistico bisognerebbe lanciare XHprof sotto carico, ad esempio
tramite dei toolscome apache ab o avalanche.



                                            Intesys Talk
Risorse
http://pecl.php.net/package/xhprof

http://xdebug.org/docs/profiler

http://derickrethans.nl/xdebug-and-tracing-memory-usage.html

http://kcachegrind.sourceforge.net/html/Home.html

http://sourceforge.net/projects/wincachegrind/

http://www.maccallgrind.com/

http://www.slideshare.net/postwait/scalable-internet-architecture




                                        Intesys Talk

More Related Content

Similar to Profilazione di applicazioni PHP con XHProf.

Ddive Xpage852
Ddive Xpage852Ddive Xpage852
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
Dominopoint - Italian Lotus User Group
 
Profiling PrestaShop
Profiling PrestaShopProfiling PrestaShop
Profiling PrestaShop
Bwlab
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
Dominopoint - Italian Lotus User Group
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
Gaetano Giunta
 
Erlug
ErlugErlug
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance Tools
Andrea Tosato
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
Dominopoint - Italian Lotus User Group
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
Alessandro Mascherin
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applications
marcocasario
 
DDive11 - xpages
DDive11 - xpagesDDive11 - xpages
La tua prima app per Ubuntu Touch
La tua prima app per Ubuntu TouchLa tua prima app per Ubuntu Touch
La tua prima app per Ubuntu Touch
Flavius-Florin Harabor
 
Presentazione eXtreme Programming
Presentazione eXtreme ProgrammingPresentazione eXtreme Programming
Presentazione eXtreme Programming
Roberto Bettazzoni
 
Progettazione e realizzazione di una piattaforma middleware per la gestione a...
Progettazione e realizzazione di una piattaforma middleware per la gestione a...Progettazione e realizzazione di una piattaforma middleware per la gestione a...
Progettazione e realizzazione di una piattaforma middleware per la gestione a...LucaGre
 
Software Re Engineering
Software Re EngineeringSoftware Re Engineering
Software Re Engineering
pantifabr
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
Francesco Collova'
 

Similar to Profilazione di applicazioni PHP con XHProf. (20)

Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Profiling PrestaShop
Profiling PrestaShopProfiling PrestaShop
Profiling PrestaShop
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
Erlug
ErlugErlug
Erlug
 
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance Tools
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applications
 
DDive11 - xpages
DDive11 - xpagesDDive11 - xpages
DDive11 - xpages
 
La tua prima app per Ubuntu Touch
La tua prima app per Ubuntu TouchLa tua prima app per Ubuntu Touch
La tua prima app per Ubuntu Touch
 
Logging
LoggingLogging
Logging
 
Presentazione eXtreme Programming
Presentazione eXtreme ProgrammingPresentazione eXtreme Programming
Presentazione eXtreme Programming
 
MODULO 1-Informatica di Base
MODULO 1-Informatica di BaseMODULO 1-Informatica di Base
MODULO 1-Informatica di Base
 
Progettazione e realizzazione di una piattaforma middleware per la gestione a...
Progettazione e realizzazione di una piattaforma middleware per la gestione a...Progettazione e realizzazione di una piattaforma middleware per la gestione a...
Progettazione e realizzazione di una piattaforma middleware per la gestione a...
 
Software Re Engineering
Software Re EngineeringSoftware Re Engineering
Software Re Engineering
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 

Profilazione di applicazioni PHP con XHProf.

  • 1. XHProf Aumentare le prestazioni di un’applicazione PHP attraverso la profilazione con XHProf. Intesys, 13 Ottobre 2011
  • 2. Problema: le prestazioni di PHP Come sappiamo PHP è un linguaggio con prestazioni poco elevate, questo perché : - un linguaggio interpretato - non è tipizzato Questi 2 fattori fanno sì che le prestazioni siano scarse. Intesys Talk
  • 3. Conoscere gli strumenti Esistono varie tecniche e strumenti per migliorare notevolmente questo aspetto, alcuni servono solo a valutare dove migliorare altri intervengono più in profondità. Citazione di Theo Schlossnagle* - Gli strumenti sono solo strumenti - Sono essenziali per fare bene il tuo lavoro - Non potranno mai fare il lavoro al posto tuo - Non potranno mai rimpiazzare esperienza e disciplina - Possono aiutarti a tenere disciplinato il tuo lavoro Abbiamo strumenti come i profilatori (PHPSpeed, XHProf, ecc.), che servono a misurare le prestazioni; mentre abbiamo altri strumenti come quelli per il caching (MemCache, xCache, ecc.) oppure di modifica del codice come Facebook Hip Hop (prende codice php e lo compila in C++, aumento delle prestazioni della cpu del 50%). * CEO di OmniTI Intesys Talk
  • 4. Che cos’è la profilazione? La profilazione è un sistema di analisi dinamico di applicazioni, i cui dati si ottengono dalle esecuzioni dell'applicazione. L'obiettivo di questo tipo di analisi è di determinare quali sezioni dell'applicazione sono da ottimizzare, aumentando la velocità complessiva o diminuendo l'utilizzo di memoria, o magari entrambi. Intesys Talk
  • 5. Misurare le prestazioni di un’applicazione PHP Molto spesso gli sviluppatori pensano di sapere quali parti della loro applicazione la rende lenta e spendono molto tempo nell'ottimizzazione di quella parte ma magari capita che il collo di bottiglia si trova da qualche altra parte. Per evitare questo problema si possono utilizzare degli strumenti detti profilatori. Di questi strumenti ne esistono parecchi, soprattutto per PHP, il più utilizzato è Xdebug che combinato con WinCacheGrind permette di mostrare il grafico delle chiamate e il tempo speso per ogni funzione. Intesys Talk
  • 6. XHProf XHprof è un altro tool, sviluppato da Facebook ed è open source. E' un profiler di tipo “a gerarchia di funzioni” scritto in C. E' dotato di un'interfaccia grafica per la presentazione dei dati raccolti Permette di avere anche uno storico delle profilazioni raccogliendo i dati in una tabella del database. Al momento le versioni ufficiali del tool sono solo per Linux e FreeBDS. Esiste una versione per Windows, ma sembra che non sia veritiera nei report come le versioni per i sistemi Unix. Intesys Talk
  • 7. Installazione di XHProf Per installarla: wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar xvf xhprof-0.9.2.tgz cd ./xhprof-0.9.2/extension/ phpize ./configure --with-php-config=/usr/local/bin/php-config make make install make test Poi bisogna abilitare l'estensione all’interno del file php.ini [xhprof] extension=xhprof.so xhprof.output_dir="/var/tmp/xhprof" Successivamente si fa solo un semplice restart di apache. Intesys Talk
  • 8. Come profilare con XHProf Per profilare un blocco di codice basta inserire le chiamate a 2 funzioni prima e dopo: // inizio profilazione xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); // codice da profilare // fine profilazione $xhprof_data = xhprof_disable(); La funzione xhprof_enable() accetta varie opzioni per controllare cosa profilare. Di default vengono profilati sia il numero di chiamate delle funzioni che il tempo di esecuzione. Si possono aggiungere anche le misurazioni relative alla memoria e alla CPU usate (attenzione al carico della cpu). Per problemi di carichi delle risorse, si possono disabilitare le funzioni native di php e le call_user_functions. // ignore builtin functions and call_user_func* during profiling $ignore = array('call_user_func', 'call_user_func_array'); xhprof_enable(0, array('ignored_functions' => $ignore)); Intesys Talk
  • 9. Utilizzare l'interfaccia di XHProf L'interfaccia che ci verrà mostrata cliccando sul link in fondo alla pagina è una tabella con le funzioni ordinate per tempo di esecuzione esclusivo. I dati che possiamo vedere sono: - numero di chiamate per funzioni - utilizzo di cpu (tempo esclusivo ed inclusivo) - utilizzo della memoria (tempo esclusivo ed inclusivo) - picco massimo di uso della memoria - wall time (tempo di esecuzione reale) Tempo inclusivo e tempo esclusivo. Il tempo inclusivo rappresenta il tempo di esecuzione della funzione stessa e di tutte le funzioni discendenti. Il tempo esclusivo rappresenta solo il tempo di esecuzione della funzione escludendo il tempo delle funzioni discendenti. Wall time Il tempo di esecuzione della funzione mentre la CPU ha altri processi in corso. Intesys Talk
  • 10. Utilizzare l'interfaccia di XHProf Intesys Talk
  • 11. Call Graph Un altro strumento davvero utile è il grafico delle chiamate. XHprof mette a disposizione questa funzione attraverso uno strumento: Graphviz. Ogni rettangolo è una funzione con le statistiche visibili nella schermata precedente. Il colore di sfondo di ogni rettangono indica quale funzione è da ottimizzare. Intesys Talk
  • 12. Ottimizzazione dell'applicazione. Quando si inizia ad ottimizzare l'applicazione, si deve ordinare la lista delle funzioni in base al tempo di utilizzo della CPU perchè quelle sono le funzioni che vanno ottimizzate per prime. E' buona norma, dopo aver ottimizzato/refattorizzato le funzioni rilanciare il profiler per vedere i progressi fatti. Dopo che siamo soddisfatti delle ottimizzazioni fatte ordiniamo per utilizzo di memoria e wall time. Breve sommario per l'ottimizzazione: - Profila - Ordina per tempo della CPU, utilizzo di memoria e wall time. - Parti dalla cima della lista - Analizza e ottimizza - Rilancia il profiler e misura i miglioramenti - Ripeti ancora, ancora e ancora Intesys Talk
  • 13. Differenze e aggregazione dei report Altra feature molto utile di XHprof è la possibilità di aggregare più report e vedere le differenze tra più lanci e quindi i miglioramenti. Ogni lancio è identificato da un ID, per vedere la differenza tra 2 report basta sostituire gli ID nel seguente URL: http://xhprof_address/index.php?run1=XXX&run2=YYY&source=myapp Intesys Talk
  • 14. Scalabilità Se si ha la necessità di avere un'applicazione scalabile si devono preventivare degli obiettivi da raggiungere a livello di prestazioni (utilizzo cpu, memoria, tempo di generazione della pagina, ecc.) e conoscere i propri limiti (framework, risorse, macchina sulla quale gira l'applicazione, ecc.). Misurare la baseline Per applicare questo anche a livello di profiler, un buon punto di partenza è la misurazione delle prestazioni di base del framework della nostra applicazione. Questo può essere utile per capire l'(in)efficienza del framework e cosa si può ottimizzare d'esso. Intesys Talk
  • 15. Scalabilità Zend_Config Un esempio su Zend, nello specifico i file di configurazione .ini. Se abbiamo una variabile che si chiama “error.logger.level”, e si usa Zend_Config per accedere al valore avremo qualcosa del genere: $config­>error­>logging­>level Ogni operatore “freccia” implica 2 chiamate di funzioni, per un totale di 6 chiamate di funzioni?! Pensate se “erroneamente” lasciate quest'accesso alla variabile all'interno di un ciclo lo spreco di risorse. Intesys Talk
  • 16. Scalabilità Zend_View Un altro esempio su Zend (il framework che utilizziamo di più). Quando si utilizza un helper della view lo stack di chiamate è questo: E ancora quando si usa la funzione partial() per renderizzare un template viene clonato l'oggetto View e annullate tutte le variabili non private. Queste operazioni vengono fatte attraverso funzioni di reflection e ad un sacco di chiamate a substr(). Altri oggetti come i modelli, o le chiamate alla funzione Zend_Json:encode(), mettono a dura prova le prestazioni dell'applicazione. Tuttavia Zend è solo un esempio di framework dalle basse prestazioni su certi componenti. Intesys Talk
  • 17. Scalabilità Identificare i colli di bottiglia E' preferibile, nel report di Xhprof, avere più dati sulle operazioni più lente, come quelle di accesso al disco, al database o la chiamata ad un web service. Se non troviamo queste funzioni in cima al report è molto probabile che ci sia un collo di bottiglia altrove e che quindi sia il caso di refactorizzare il componente o addirittura l'intera architettura dell'applicazione ove possibile. Prima di ottimizzare E' buona norma, prima di andare a lavorare su parti di codice “lento” andare a fare delle valutazioni del tipo: - è proprio necessaria questa funzione? - è il posto giusto per questa funzione? - è possibile ridurre il volume di dati da processare? Se è vero che PHP non è mister velocità noi no diamogli una mano ad essere ancora più lento! Profilazione sotto carico Per avere un report di dati realistico bisognerebbe lanciare XHprof sotto carico, ad esempio tramite dei toolscome apache ab o avalanche. Intesys Talk