O xDebug é uma extensão para PHP que auxilia na depuração do seu código (o próprio nome já o sugere). Porém o xDebug tem uma função diferencial, que é fazer o Profiler do código, anunciando a velocidade dos scripts e funções em geral. É uma ferramenta bem poderosa para analisar o seu código PHP e determinar as páginas que estão lentas, procurando uma solução e aumentando a velocidade de execução.
Instalação
Baixe o arquivo Xdebug 2.0.5 e instale.
Localize o arquivo “xdebug.ini”, talvez ele esteja na pasta
/etc/php5/conf.d/xdebug.ini, depois modifique esse arquivo com as
seguintes linhas:
|--------------------------------------------------------------------------------------------|
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so
xdebug.default_enable = On
xdebug.collect_includes = On
xdebug.collect_params = On
xdebug.collect_return = On
xdebug.collect_vars = On
xdebug.dump_globals = On
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000 ; Choose a port
profiler settings
xdebug.profiler_aggregate=1
xdebug.profiler_append=1
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_name = cachegrind.out.%s
xdebug.profiler_output_dir = "/var/www/traces/"
|--------------------------------------------------------------------------------------------|
Isso fará com que o arquivo cachegrind.out.numerodaexecução
seja criado no diretório traces.
Verifique se o apache (www-data) tem permissão de criar arquivos nesse
diretório. Se não tiver, mude as permissões.
Restarte o apache.
Para gerar esse diretório, é necessário que em seu script php
seja acrescentada a variável XDEBUG_PROFILE, como por exemplo http://teste.php/?XDEBUG_PROFILE.
Essa execução criará o arquivo cachegrind.out.test no diretório
traces.
Analisando os dados
Para visualizar esse arquivo, baixe aqui a ferramenta kcachegrind
(Linux, KDE).
Se o seu sistema operacional for Windows, você poderá usar uma
ferramenta semelhante, chamada WinCacheGrind.
KCachegrind é útil em uma fase posterior do desenvolvimento de
software, chamado Profiling.
Abra o arquivo que foi gerado durante a execução do script, que
mostrará a seguinte situação:
A diferença entre “Incl.” e “Self”
Estes são atributos de custo para as funções em relação a alguns
tipo de evento. Como funções, podem chamar uns aos outros, não faz
sentido distinguir o custo do própria função ( ‘Custo Self’) e os
custos, incluindo todas as funções de chamada ( ‘Custo Inclusivo’).
‘Self’ é, por vezes, também referido como custo ‘Exclusivo’ . Assim, por
exemplo, para main (), você sempre terá um custo global de quase 100%,
enquanto o custo do auto é insignificante quando o verdadeiro trabalho
é feito em outra função.
Os valores não são medidos em segundos, muito menos em
milisegundos, são valores particulares do KCachegrind utilizados apenas
para diferenciar a quantidade de tempo utilizada em cada uma das
instruções.