Время генерации страницы - как сделать?

Статус
В этой теме нельзя размещать новые ответы.

I-Mixail

Создатель
Регистрация
13 Янв 2014
Сообщения
31
Реакции
18
Пытался в подвале сайта сделать строку с временем генерации страницы. Нашел в интернете готовые решение, но показывает, что странница генерируется за 0.0000007 секунд - лажа какая-та. Есть ли ноормальная реализация на php?
 
Чем тебя не устраивает 0.0000007 секунд?

Вот мой простейший
PHP:
$st = microtime(TRUE);
printf ("\r\n%f seconds!\r\n", microtime(TRUE) - $st);

на пустом коде он покажет 0.000000 seconds! :)

Современный php работает довольно быстро... Если надо красивостей пиши перевод в другие единицы времени.

Пример:
PHP:
$st = microtime(TRUE);

foreach(range(1, 1000000) as $f){}

$end = microtime(TRUE) - $st;
printf ("\r\n%f seconds!\r\n", $end);

printf ("\r\n%.0f ms!\r\n", $end * 1000);
 
Последнее редактирование:
Пытался в подвале сайта сделать строку с временем генерации страницы. Нашел в интернете готовые решение, но показывает, что странница генерируется за 0.0000007 секунд - лажа какая-та. Есть ли ноормальная реализация на php?

Страница может генерироваться и за 0.0000007 сек., но визуально сайт открывается медленно,
нужно проверить пинг сайта, например через сервис Для просмотра ссылки Войди или Зарегистрируйся
но лучше через себя

сочетание клавиш Win+R на клавиатуре или откройте Пуск -> Выполнить. В появившемся окне наберите cmd:

в ней команда
ping site.com

Для просмотра ссылки Войди или Зарегистрируйся
 
Страница может генерироваться и за 0.0000007 сек.
Это слишком большой результат :no: Реализовал по другому: увидел на форуме fluxbb такую же фишку, а у меня форум на базе fluxbb. Мне и подсказали.
 
Начиная с версии PHP 5.4.0. Появился новый индекс в супер глобальном массиве $_SERVER['REQUEST_TIME_FLOAT'] (Временная метка начала запроса с точностью до микросекунд). Получим время от начала запроса. Разница очень большая.

PHP:
$st = $_SERVER['REQUEST_TIME_FLOAT'];

.
.
.

$end = microtime() - $st;

Снимок экрана 2015-03-09 в 2.14.12.png
 
Начиная с версии PHP 5.4.0. Появился новый индекс в супер глобальном массиве $_SERVER['REQUEST_TIME_FLOAT']
Наученный горьким опытом, для измерения времени выполнения, я рекомендую использовать одну и ту же функцию для получения начального и конечного значения.
И это оправдывает себя - Для просмотра ссылки Войди или Зарегистрируйся

Как я понял, REQUEST_TIME_FLOAT берётся у сервера (apach, nginx, sapi, ...) и будет включать в себя сумму отрезков времени: обработка сервером, передача на php, подгрузка всех модулей и т.п.
В некотором роде код (microtime(true)-$_SERVER['REQUEST_TIME_FLOAT']) является более информативным для пользователя поскольку более точно показывает разницу между запросом к серверу и окончанием его обработки. Но для разработчика лучше использовать microtime(true) для начала отсчёта. Особенно при оптимизации кода!
 
Получилось вот так:
Код:
[ Сгенерировано за 0.021 секунд, выполнено 10 запросов - Памяти используется: 2.24 МБ (Пик: 2.47 МБ) ]
Вот это для меня реальное время, да и вместе со временем генерации есть другие показатели :sun:

Я надеюсь, что Visman не будет против, если я выложу его решение.
Используется такая функция, работает как в php4, так и в php5:
PHP:
//
// Return current timestamp (with microseconds) as a float
//
function get_microtime()
{
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
}
В начале выполняемого кода стоит ее вызов, для определения времени старта
PHP:
// Record the start time (will be used to calculate the generation time for the page)
$pun_start = get_microtime();
В конце выполяемого кода (в футере) стоит вывод информации на экран
PHP:
echo '<p id="debugtime">[ ';

    // Calculate script generation time
    $time_diff = sprintf('%.3f', get_microtime() - $pun_start);
    echo sprintf($lang_common['Querytime'], $time_diff, $db->get_num_queries());

    if (function_exists('memory_get_usage'))
    {
        echo ' - '.sprintf($lang_common['Memory usage'], file_size(memory_get_usage()));

        if (function_exists('memory_get_peak_usage'))
            echo ' '.sprintf($lang_common['Peak usage'], file_size(memory_get_peak_usage()));
    }

    echo ' ]</p>'."\n";
В стороннем коде отличном от fluxbb проблема будет с определением количества запросов к бд $db->get_num_queries(), т.к. эта функция написана в движке в коде доступа к базе.
И вместо $lang_common['...'] надо использовать тест из тестовых файлов, а не этот массив.
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху