PHP 获取页面加载统计 - 如何测量 php 脚本执行/加载时间

问题描述 投票:0回答:9

标题中的内容:

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

页脚中的内容:

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 4);
echo 'Page generated in ' . $total_time . ' seconds.';

输出:页面在 1292008977.54 秒内生成。

有人可以帮我弄清楚为什么结果不对吗??我正在使用 PHP5.

php time load pageload
9个回答
8
投票

看到这是谷歌的第一个结果,我想我会分享我对这个问题的解决方案。将其放在页面顶部:

$startScriptTime=microtime(TRUE);

然后将此代码放在页面底部:

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

当您查看页面的源代码时,您可以在 HTML 最后一行的评论中看到加载时间。


6
投票

microtime()
微秒 返回当前的 Unix 时间戳。我在那里没有看到任何从 microseconds 到秒的转换的数学。

microtime(true)
seconds

的形式返回时间

6
投票

您可以使用这个简单的函数来避免变量范围问题:

<?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.';

2
投票

footer
的一个衬里,它返回
seconds
float

echo number_format(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"],4);

您不需要在脚本的开头放置任何内容,因为

$_SERVER["REQUEST_TIME_FLOAT"]
会在 PHP 脚本启动时注意捕获这段时间...然后您只需要在 PHP 的最后计算有多少时间通过了


1
投票
$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>';

0
投票

我喜欢用这样的东西。可以轻松地为多个代码块计时,而无需处理变量名等。必须启用会话。

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);  
    }
}

用法:

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

0
投票

把这个放在你的标题中

<?php

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

?>

这在你的页脚

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

这将告诉您网站页面生成需要多长时间以及加载页面使用了多少内存


0
投票

问题在于可变范围。您在页眉中设置 $start 变量,但在页脚中,此变量将为空。所以 $total_time 只是当前时间 - 0,给你当前时间。

解决方案是使用 php 的 GLOBALS。在标题中:

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

在页脚中:

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

0
投票

我不会在每个页面中使用 microtime,而是将 microtime 插入 $_REQUEST,然后从函数内的当前时间中减去该时间,并将该函数设置为在脚本执行终止时调用:

register_shutdown_function ( 'Your_function_name' );

我认为使用全局脚本很有用,它将包含在整个应用程序的每个脚本/类的开头,它有助于我处理错误、管理会话等……

将微时间添加到 $_REQUEST 将是该脚本的第一行,您也可以在那里包含终止函数。

© www.soinside.com 2019 - 2024. All rights reserved.