Medindo a Velocidade do seu Código
<?php /** * test_speed.php - Only to check the time of execution of an algorithm * * @author Sergio A. Pohlmnann * @date january, 18 of 2003 */ $nn = 5; // A single counter // Making an array with 10000 numbers for ($i = 0; $i < 10000; $i++) { $array[$i] = $i; // put a number in the current element } // Shuffling the array shuffle($array); // Now, the tests // First, with a single loop $start = time_check(); // Actual time (start) echo "<hr>Test with a loop<br>\n"; for ($number = 1; $number <= $nn; $number++) { // Finding a number for ($loop = 0; $loop < 10000; $loop++) { if ($array[$loop] == $number) { echo "Found $number<br>"; } } } $end = time_check(); // Atual time (end) $time = $end - $start; // Calculate a transcurred time echo "<br>Total Time: $time<br>"; // Show the time // Now, with the internal function $start = time_check(); // Actual time (start) echo "<hr>Test with a function<br>\n"; for ($number = 1; $number <= $nn; $number++) { // Finding a number if (in_array($number, $array)) { echo "Found $number<br>"; } } $end = time_check(); // Atual time (end) $time = $end - $start; // Calculate a transcurred time echo "<br>Total Time: $time<br>"; // Show the time // end main program /** * time_check() - Return a time, in seconds, with various decimals * * @author Sergio A. Pohlmann * @date January, 18 of 2003 */ function time_check() { $micro = explode(" ", microtime()); // obtain the data $total = $micro[1] + $micro[0]; // calculate the value return $total; } // end time_check() ?>
Parece complicado? Na verdade, tudo o que, realmente importa, neste código, é a função "time_check()". Ela se responsabiliza por ler o tempo, no formato microtime(), que é uma string, onde a primeira parte são os milionésimos, e a segunda são os segundos. Então, através de explode, colocamos os dois dados em um array, e calculamos o valor, com decimais, simplesmente somando os dois elementos. Por fim, devolvemos este valor.
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!