+1

Medindo a Velocidade do seu Código

criado por Sergio A. Pohlmann .'. em 21/01/2003 12:01am
<?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.

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.)