PHP Get Page Stats - Как измерить время выполнения PHP-скрипта / время загрузки - PullRequest
7 голосов
/ 10 декабря 2010

Что у меня в шапке:

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

Ответы [ 8 ]

6 голосов
/ 08 марта 2013

Видя, как это первый результат в Google, я решил поделиться своим решением этой проблемы.Поместите это в верхней части вашей страницы:

$startScriptTime=microtime(TRUE);

И затем поместите этот код в нижней части вашей страницы:

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

Когда вы просматриваете источник страницы, вы можете увидетьвремя загрузки в комментарии к последней строке вашего HTML.

5 голосов
/ 10 декабря 2010

Вы можете использовать эту простую функцию, чтобы избежать проблемы с переменной областью:

<?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.';
4 голосов
/ 10 декабря 2010

microtime() возвращает текущую метку времени Unix с микросекунд .я не вижу там никакой математики, которая делает преобразование из микросекунд в секунды.

microtime(true) возвращает время в виде числа с плавающей запятой за секунд

1 голос
/ 26 сентября 2013
<code>$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>
';
0 голосов
/ 15 декабря 2017

Вместо использования microtime на каждой странице, я бы вставил microtime в $ _REQUEST, а затем вычел это время из текущего времени внутри функции и установил, что эта функция вызывается, когда выполнение скрипта завершается с помощью:

register_shutdown_function ( 'Your_function_name' );

Я думаю, что полезно использовать глобальный скрипт, который будет включен в начало каждого скрипта / класса в приложении, он помогает мне в обработке ошибок, управлениисессий и т. д. *

Добавление microtime в $ _REQUEST будет первой строкой в ​​этом скрипте, и вы также можете включить туда свою завершающую функцию.

0 голосов
/ 15 июня 2016

Проблема с переменной областью действия. Вы устанавливаете переменную $ start в заголовке, но в нижнем колонтитуле эта переменная будет пустой. Так что $ total_time будет просто текущим временем - 0, давая вам текущее время.

Решением является использование php GLOBALS. В шапке:

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

А в нижнем колонтитуле:

$total_time = round(($finish - $GLOBALS['time_start']), 4);
0 голосов
/ 06 августа 2015

Поместите это в ваш заголовок

<?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 голосов
/ 10 декабря 2010

Мне нравится использовать что-то вроде этого. Упрощает синхронизацию нескольких блоков кода без манипулирования именами переменных и т.п. сеансы должны быть включены.

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...