+1

Medindo a Velocidade do seu Código

criado por Sergio A. Pohlmann .'. em 21/01/2003 12:01am
Medindo a velocidade de seus algoritmos

Seguramente você já se deparou com a situação onde desenvolveu um prorama ou função, e, passado algum tempo, fez alguma modificação nele(a) e gostaria de saber (em números) a diferença de velocidade, se existe.

Ou, quer fazer um algoritmo, e não sabe se usa uma função ou outra, se usa um ou outro método, uma ou outra técnica, porque não pode medir, com precisão, qual deles é mais eficiente.

Bom, nestes casos, se sabe que o mais complicado, é saber resultados precisos, em termos de tempo, já que as páginas, geralmente, são montadas com uma velocidade bastante alta, e muito difícil (senão impossível) de ser cronometrada "a olho".

Então nada melhor que usar uma funçãozinha, para anotar a hora atual, no início, e no final, e depois, subtrair uma da outra, e saber o tempo que levou o dito algoritmo, para ser executado. Para isto, pode-se utilizar qualquer função que traga data e hora, como "time()", por exemplo. O problema de "time()" é que, se tratamos de medir a velocidade em segundos, geralmente estaremos completamente fora de precisão, pois muitos algoritmos se executam centenas de vezes em um só segundo.

Então? Bom, o ideal é usar algo mais preciso. Uma boa alternativa, que é a que uso aquí, e é a que, efetivamente, uso, para testar meus algoritmos, é a função "microtime()" que devolve segundos inteiros e fracionados, com bom número de casas decimais.

Por exemplo, vamos supor que precisamos descobrir se um determinado número faz parte, como elemento, de um array de números.

Duas opções rápidas: Usar um, e verificar cada elemento do array, ou usar uma função pre-definida que já faça isto, internamente ( "in_array()"cumpre bem, este tipo de trabalho). Mas, qual, realmente, é a melhor opção, em termos de velocidade?

Se experimentar, em um programa simples, com uma e outra opção, provavelmente não vai notar diferença sensível. Mas em programas grandes, pode valer a pena optar pela versão mais rápida (esta pode, justamente, ser sua arma comercial, em alguns casos).

Na próxima página iremos experimentar mais com isso.

Comentários:

Mostrando 1 - 3 de 3 comentários
a disse:
Tb achei excelente!!
Muito inteligente!
19/06/2003 10:22pm (~21 anos atrás)

Excelente. Tua observaçao, seguramente vai melhorar bastante as medidas que o pessoal tomar. Realmente, é importante, e faz diferença.
Justamente, quando se está buscando melhores velocidades, o melhor é experimentar coisas assim, como inverter determinadas posiçoes, etc, ainda que isto, muitas vezes, possa nao fazer muito sentido.
E, discutir o tema, com a comunidade, seguramente, só nos vai trazer um enriquecimento, e um melhor entendimento desta excelente linguagem.
Obrigado pela contribuiçao,
Abraços

Sergio




21/01/2003 9:55am (~21 anos atrás)

Em primeiro lugar parabéns pelo artigo.
A +- uma semana, avia começado a usar está "manha".
Em segundo quero chamar atenção, para algumas descobertas que podem interferir no resultado final desta "manha".
1) A ordem com que os blocos de código aparece faz diferência. Pude comprovar isto com apenas um teste simples. De valor a variaves, (com nomes diferentes, pois isso influência) no lugar dos loops, por exemplo:
//......
$start = time_check();
$s = 'Ola! Mundo cruel';
$end = time_check();
//......
$start = time_check();
$d = 'Ola!';
$start = time_check();
//......
//End
Rode e anote os valores.
Agora altere as variaveis de lugar.
Você vera uma sensivel queda mais, poderar checar que a mudança de lugar acarretou diferença de tempo, e não o código em si.
Fica evidenciado que dar ao valor a $s é mais demorado, mais não tanto.
Essa diferença de tempo ocorro por varios motivos o principal é:
1) Se a váriavel ainda não foi definido o kernel do php vai levar mais tempo para fazelo.
2) Da mesma maneira se a várivel já foi usada, menos tempo para acessala !

Em fim, fassão seus teste e observe o rezultados, isso tudo é muito dificil de ser analizado, como o Sergio mesmo dice a varios fatores que dão influência nesta medida.

A unica maneira de se saber realmente qual função e de fato melhor, e estudar o código do php, ou seja e ler código c, que não tem fim. Como isso nem sempre é possivel a melhor mesmo e estudar os códigos e observar seu comportamento. Depois discutir com seus amigos programadores.

Se alguem obter resultados diferentes por favor me avise, não quero continuar na escuridão se nela estiver!
21/01/2003 6:34am (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)