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

Тема в разделе "Как сделать...", создана пользователем I-Mixail, 24 фев 2015.

Статус темы:
Закрыта.
  1. I-Mixail

    I-Mixail Создатель

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

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Чем тебя не устраивает 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(11000000) as $f){}

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

    printf ("\r\n%.0f ms!\r\n"$end 1000);
     
    Последнее редактирование: 25 фев 2015
  3. bork75

    bork75 Д☼брая собака )

    Регистр.:
    21 июн 2008
    Сообщения:
    1.449
    Симпатии:
    716
    Страница может генерироваться и за 0.0000007 сек., но визуально сайт открывается медленно,
    нужно проверить пинг сайта, например через сервис http://pr-cy.ru/monitoring/
    но лучше через себя

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

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

    http://beget.ru/art_ping_tracert_site
     
  4. I-Mixail

    I-Mixail Создатель

    Регистр.:
    13 янв 2014
    Сообщения:
    33
    Симпатии:
    16
    Это слишком большой результат :no: Реализовал по другому: увидел на форуме fluxbb такую же фишку, а у меня форум на базе fluxbb. Мне и подсказали.
     
  5. Concor

    Concor Создатель

    Регистр.:
    9 мар 2015
    Сообщения:
    0
    Симпатии:
    2
    Начиная с версии PHP 5.4.0. Появился новый индекс в супер глобальном массиве $_SERVER['REQUEST_TIME_FLOAT'] (Временная метка начала запроса с точностью до микросекунд). Получим время от начала запроса. Разница очень большая.

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

    .
    .
    .

    $end microtime() - $st;
    Снимок экрана 2015-03-09 в 2.14.12.png
     
    latteo и I-Mixail нравится это.
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Наученный горьким опытом, для измерения времени выполнения, я рекомендую использовать одну и ту же функцию для получения начального и конечного значения.
    И это оправдывает себя - https://bugs.php.net/bug.php?id=64370

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

    I-Mixail Создатель

    Регистр.:
    13 янв 2014
    Сообщения:
    33
    Симпатии:
    16
    Получилось вот так:
    Код:
    [ Сгенерировано за 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['...'] надо использовать тест из тестовых файлов, а не этот массив.
     
    Последнее редактирование модератором: 9 мар 2015
    latteo нравится это.
Статус темы:
Закрыта.