Question

I tried using it like this:

$now = microtime(true); 
// cpu expensive code here
echo microtime(true) - $now;   

but regardless of what code I enter between these statements, I alwasy get almost the same results, something like 3.0994415283203E-6

What am I doing wrong?

Was it helpful?

Solution

Better solution. Run the code multiple times to average out the operation:

$runs = 500;

$start = microtime(true);
for ($i = 0; $i < $runs; $i++) {
    //cpu expensive code here
}
$end = microtime(true);
$elapsed = number_format($end - $start, 4);
$one = number_format(($end - $start) / 500, 7);
echo "500 runs in $elapsed seconds, average of $one seconds per call";

OTHER TIPS

3.0994415283203E-6 equates to 0.0000030994415283203.

The E-6 tells you to move the decimal point left six places. E+6 would mean the opposite. As @deceze mentioned, this is called scientific notation.

If you're doing a performance test, it's a good idea to put the code into a 100000 or so iteration loop, and then divide the resulting time by 100000. That way you get a more accurate average.

You're not doing anything wrong, it's just that the code you're timing really only takes a fraction of a second to run.

If you want to prove it, sleep for a few seconds.

It looks like you are using microtime() without the optional argument, but you say you are, so I am not 100% sure.

What is the output of this:

$now = microtime(true);
sleep(1);
echo microtime(true) - $now;

PHP always amazes me with how fast it is. Your code seems to be right. Maybe your code is really only taking 3 milliseconds.

You could try making a long loop, something like this:

$x=0;
while ($x<1000000)
  {
  $x++;
  }

Add this code inside of your timer. For me, looping 1 million times usually takes about 1/2 second. See if this changes your time.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top