Aug 06 2008

Função simples para testar tempo de execução em PHP

Category: PHPfabiomcosta @ 11:14

Vou ser bem objetivo neste post. Mostrarei uma função bastante simples para que rapidamente você verifique o tempo de execução de seus scripts PHP. Após mostrar a função, exemplo de uso e resultado, explicarei o fucionamento da função.

function getTime(){
    static $tempo;
    list($usec, $sec) = explode(" ",microtime());
    if( $tempo == NULL ){
        $tempo = ((float)$usec + (float)$sec);
    }
    else{
        echo 'Tempo (segundos): '.(((float)$usec + (float)$sec)-$tempo).'';
    }
}
Esta função funciona no PHP 4 e 5. No PHP 5 foi adicionado um parâmetro a esta função, que serve como uma flag para que o retorno da função seja float ou não (documentação do PHP para a função microtime). Então uma forma de escrever esta função somente para PHP 5 seria:
function getTime(){
    static $tempo;
    if( $tempo == NULL ){
        $tempo = microtime(true);
    }
    else{
        echo 'Tempo (segundos): '.(microtime(true)-$tempo).'';
    }
}
Fica mais elegante porém só funciona para a versão 5 do PHP. Vou mostrar agora um exemplo de como usá-la para que vocês vejam a simplicidade de uso.
getTime();

$testeIteracao = 0; for($i=0;$i<1000000;$i++){ $testeIteracao++; }

getTime();

No código acima o resultado aqui na minha máquina foi:
Tempo (segundos): 0.19565415382385
Ou seja o PHP levou 195,65 milissegundos para executar este loop.

Como vimos, no código de exemplo, a função é chamada uma vez antes do código a ser testado e outra vez depois do código. Na primeira chamada a variável estática “$tempo” é declarada e possui valor “NULL” e por isso obedece ao “if( $tempo == NULL )” e recebe o valor da função “microtime()”. Na segunda chamada a variável “$tempo”, por ser estática, já possui um valor que é o tempo que foi armazenado na primeira chamada. Então entramos no “else” que subtrai o valor de uma nova chamada da função “microtime()” com o valor de “$tempo” e imprime esse valor. Dessa forma obtemos o tempo que levou da primeira chamada de “getTime()” até a segunda, ou seja o tempo de execução do código que está entre as duas chamadas da função.

As variáveis estáticas em classes, são variáveis que podem ser acessadas mesmo sem se ter um instância de um objeto daquela classe (Palavra-chave ‘static’ em classes). Porém no caso de uma variável estática em uma função este valor é mantido entre as chamadas da função, sendo mantido em seu escopo, por isso aconteceu o que foi mostrado.

Espero que tenham gostado, Abraço e até o próximo post.

Tags: , ,