Medindo a Velocidade do seu Código
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.
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.
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
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
(~22 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!
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
(~22 anos atrás)
Muito inteligente!