Pubblicazione incrociata del mio riferimento dalla documentazione beta SO che non è in linea.
Profilazione con XDebug
Un'estensione di PHP chiamata Xdebug è disponibile per assistere nella creazione di profili di applicazioni PHP , nonché nel debug di runtime. Quando si esegue il profiler, l'output viene scritto in un file in un formato binario chiamato "cachegrind". Le applicazioni sono disponibili su ciascuna piattaforma per analizzare questi file. Non sono necessarie modifiche al codice dell'applicazione per eseguire questa profilazione.
Per abilitare il profiling, installa l'estensione e regola le impostazioni di php.ini. Alcune distribuzioni Linux vengono fornite con pacchetti standard (ad esempio il php-xdebug
pacchetto Ubuntu ). Nel nostro esempio eseguiremo il profilo facoltativamente in base a un parametro di richiesta. Questo ci consente di mantenere le impostazioni statiche e attivare il profiler solo se necessario.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Quindi utilizzare un client Web per effettuare una richiesta all'URL dell'applicazione che si desidera profilare, ad es
http://example.com/article/1?XDEBUG_PROFILE=1
Man mano che la pagina viene elaborata, verrà scritta in un file con un nome simile a
/tmp/cachegrind.out.12345
Per impostazione predefinita, il numero nel nome file è l'id del processo che lo ha scritto. Questo è configurabile con l' xdebug.profiler_output_name
impostazione.
Nota che scriverà un file per ogni richiesta / processo PHP che viene eseguito. Ad esempio, se si desidera analizzare un post di un modulo, verrà scritto un profilo per la richiesta GET per visualizzare il modulo HTML. Il parametro XDEBUG_PROFILE dovrà essere passato alla successiva richiesta POST per analizzare la seconda richiesta che elabora il modulo. Pertanto, quando si profila, a volte è più semplice eseguire curl per inviare direttamente un modulo.
Analizzare l'uscita
Una volta scritta, la cache del profilo può essere letta da un'applicazione come KCachegrind o Webgrind . PHPStorm, un famoso IDE PHP, può anche visualizzare questi dati di profilazione .
KCachegrind, ad esempio, mostrerà informazioni tra cui:
- Funzioni eseguite
- Tempo di chiamata, sia esso stesso che comprensivo delle successive chiamate di funzione
- Numero di volte in cui viene chiamata ciascuna funzione
- Grafici di chiamata
- Collegamenti al codice sorgente
Cosa cercare
Ovviamente l'ottimizzazione delle prestazioni è molto specifica per i casi d'uso di ciascuna applicazione. In generale è bene cercare:
- Chiamate ripetute per la stessa funzione che non ti aspetteresti di vedere. Per le funzioni che elaborano e interrogano i dati, queste potrebbero essere le principali opportunità per la cache dell'applicazione.
- Funzioni a funzionamento lento. Dove trascorre la maggior parte del tempo l'applicazione? il miglior risultato nell'ottimizzazione delle prestazioni è concentrarsi su quelle parti dell'applicazione che consumano più tempo.
Nota : Xdebug, e in particolare le sue funzionalità di profilazione, richiedono molte risorse e rallentano l'esecuzione di PHP. Si consiglia di non eseguirli in un ambiente server di produzione.