Como posso dizer qual classe de muitas (que fazem o mesmo trabalho) é executada mais rapidamente? existe um software para medir isso?
fonte
Como posso dizer qual classe de muitas (que fazem o mesmo trabalho) é executada mais rapidamente? existe um software para medir isso?
Você tem (pelo menos) duas soluções:
O bastante "ingênuo" está usando o microtempo (verdadeiro) antes e depois de uma parte do código, para saber quanto tempo passou durante sua execução; outras respostas disseram isso e já deram exemplos, então não direi muito mais.
Esta é uma boa solução se você deseja comparar algumas instruções; como comparar dois tipos de funções, por exemplo - é melhor se feito milhares de vezes, para garantir que qualquer "elemento perturbador" seja calculado.
Algo assim, então, se você quiser saber quanto tempo leva para serializar uma matriz:
$before = microtime(true);
for ($i=0 ; $i<100000 ; $i++) {
serialize($list);
}
$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";
Não é perfeito, mas é útil e não leva muito tempo para configurar.
A outra solução, que funciona muito bem se você quiser identificar qual função leva muito tempo em um script inteiro, é usar:
Para obter arquivos de criação de perfil, você deve instalar e configurar o Xdebug; dê uma olhada na página Profiling PHP Scripts da documentação.
O que geralmente faço não é habilitar o profiler por padrão (ele gera arquivos muito grandes e torna as coisas mais lentas) , mas uso a possibilidade de enviar um parâmetro chamado XDEBUG_PROFILE
GET data, para ativar o profiling apenas para a página que preciso.
A parte relacionada à criação de perfil do meu php.ini é assim:
xdebug.profiler_enable = 0 ; Profiling not activated by default
xdebug.profiler_enable_trigger = 1 ; Profiling activated when requested by the GET parameter
xdebug.profiler_output_dir = /tmp/ouput_directory
xdebug.profiler_output_name = files_names
(Leia a documentação para mais informações)
Esta captura de tela é de um programa C ++ em KcacheGrind: (fonte: sourceforge.net ) Você obterá exatamente o mesmo tipo de coisa com scripts PHP ;-)
(Com KCacheGrind, quero dizer; WinCacheGrind não é tão bom quanto KCacheGrind ... )
Isso permite que você tenha uma boa visão do que leva tempo em sua aplicação - e às vezes ajuda definitivamente a localizar a função que está deixando tudo lento ^^
Observe que o Xdebug conta o tempo de CPU gasto pelo PHP; quando o PHP está esperando uma resposta de um Banco de Dados (por exemplo), ele não está funcionando; apenas esperando. Portanto, o Xdebug pensará que a solicitação do DB não leva muito tempo!
Isso deve ser perfilado no servidor SQL, não PHP, então ...
Espero que isso seja útil :-)
Divirta-se!
Para coisas rápidas, eu faço isso (em PHP):
Você também pode usar um criador de perfil como http://xdebug.org/ .
fonte
Fiz uma aula de tempo simples, talvez seja útil para alguém:
Usar:
fonte
echo
, não$echo
Atualização de 2020
Já se passaram muitos anos desde a última vez que respondi a essas perguntas, então achei que isso merece uma atualização sobre o panorama do APM.
Respondido originalmente em outubro de 2015
Aqui está uma resposta direta à sua pergunta
Sim existe. Estou me perguntando por que ninguém ainda não mencionou isso. Embora as respostas sugeridas acima pareçam adequadas para uma verificação rápida, não são escaláveis a longo prazo ou para um projeto maior.
Por que não usar uma ferramenta Application Performance Monitoring (APM) que foi construída exatamente para isso e muito mais. Confira NewRelic, AppDynamics, Ruxit (todos têm versão gratuita) para monitorar o tempo de execução, o uso de recursos, o rendimento de cada aplicativo até o nível do método.
fonte
Se você quiser testar rapidamente o desempenho de um framework, você pode colocar o arquivo index.php
Toda vez, você obterá tempo de execução em milissegundos . Porque microssegundos não são muito úteis para testar um caso de estrutura.
fonte
Tenho usado o XHProf recentemente http://pecl.php.net/package/xhprof . Foi originalmente desenvolvido pelo Facebook e vem com uma interface web decente.
fonte
Gostaria de compartilhar com vocês uma função criada por mim mesmo que uso para medir a velocidade de qualquer função existente com até 10 argumentos:
Exemplo
Devoluções
fonte
Se for algo que pode ser testado fora do contexto da Web, eu apenas uso o
time
comando Unix .fonte
Zend Studio possui suporte embutido para criação de perfil usando XDebug ou ZendDebugger. Ele fará o perfil de seu código, informando exatamente quanto tempo cada função demorou. É uma ferramenta fantástica para descobrir onde estão seus gargalos.
fonte
Você pode usar coisas básicas como armazenar carimbos de data / hora ou microtime () antes e depois de uma operação para calcular o tempo necessário. Isso é fácil de fazer, mas não muito preciso. Talvez a melhor solução seja o Xdebug , nunca trabalhei com ele, mas parece ser o depurador / profiler de PHP mais conhecido que posso encontrar.
fonte