PHP Get Page Load Stats - How to measure php script execution / load time

↘锁芯ラ 提交于 2019-11-30 13:58:36
John Gardner

microtime() returns the current Unix timestamp with microseconds. i don't see any math there that does the conversion from microseconds to seconds.

microtime(true) returns the time as a float in seconds

GhostInTheSecureShell

Seeing how this is the first result in Google I thought I'd share my solution to this problem. Put this at the top of your page:

$startScriptTime=microtime(TRUE);

And then put this code at the bottom of your page:

$endScriptTime=microtime(TRUE);
$totalScriptTime=$endScriptTime-$startScriptTime;
echo "\n\r".'<!-- Load time: '.number_format($totalScriptTime, 4).' seconds -->';

When you view source of a page you can see the load time in a comment on the last line of your HTML.

You can use this simple function to avoid the variable scope issue:

<?php

function timer()
{
    static $start;

    if (is_null($start))
    {
        $start = microtime(true);
    }
    else
    {
        $diff = round((microtime(true) - $start), 4);
        $start = null;
        return $diff;
    }
}

timer();

echo 'Page generated in ' . timer() . ' seconds.';
Mizhar
$page_loadtime_in_millisec = ($page_loadtime / 1000);
echo '<pre>Page Infor:
Page Load Time : ' . $page_loadtime.' <b>Microseconds</b><br/>
Page Load Time : ' . $page_loadtime_in_millisec.' <b>Milliseconds</b><br/>
Page Load Time : ' . number_format(($page_loadtime_in_millisec/1000),18) . ' <b>Seconds</b></pre>';

I like to use something like this. Makes it easy to time multiple code blocks without juggling variable names and such. sessions have to be enabled.

function code_timer ($name) {

    $mtime = explode(' ',microtime());
    $time = $mtime[1] + $mtime[0];

    //determine if we're starting the timer or ending it
    if ($_SESSION["timer-$name"]) {
      $stime=$_SESSION["timer-$name"];
      unset($_SESSION["timer-$name"]);
      return ($time - $stime);
    } else {
      $_SESSION["timer-$name"]=$time;
      return(true);  
    }
}

usage:

code_timer ('a');
//do stuff
echo "page generated in " . code_timer('a');

Put this in your Header

<?php

$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];

?>

and this in your footer

<html><center>Page generated in <?php $load = microtime();print (number_format($load,2));?> seconds. <?php
$loadtime = explode(' ', microtime()); $loadtime = $loadtime[0]+$loadtime[1]-$starttime; echo 'Peak memory usage: ',round(memory_get_peak_usage()/1048576, 2), 'MB';
?></center></html>

this will tell you how long it took your sites page to generate and how much Memory was used to load the page

The issue is with variable scope. You set your $start variable in the header, but in footer, this variable will be empty. So $total_time would just be current time - 0, giving you the current time.

A solution is to use php's GLOBALS. In the header:

$GLOBALS['time_start'] = microtime(true);

And in the footer:

$total_time = round(($finish - $GLOBALS['time_start']), 4);

Instead of using microtime in every single page, what i would do is to insert microtime into $_REQUEST and then subtract that time from the current time inside a function and set that function to be called when the script execution is terminated using:

register_shutdown_function ( 'Your_function_name' );

I think that it is useful to use a global script which will be included at the beginning of every script / class throughout the application, it helps me in handling errors, managing sessions, etc...

Adding microtime to $_REQUEST would be the first line in that script and you can include your terminating function there too.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!