Сравнительный анализ времени загрузки страницы PHP

Как я могу измерить время, необходимое для загрузки страницы (с различными операторами PHP)?

Немного похоже на статистику, доступную здесь - http://talks.php.net/show/drupal08/24< /а>


person Anant    schedule 16.03.2010    source источник


Ответы (10)


Самый простой из них — Apache Bench (называется ab)< /em>, который поставляется вместе с Apache:

  • Это инструмент командной строки
  • Это может отправлять много запросов параллельно на и URL
  • И сообщает тайминги, ошибки,...

Похоже, это очень простой отчет, представленный на вашем слайде.
(На самом деле он сообщает больше)


Если ваши потребности несколько сложнее, Siege может стать хорошей альтернативой.

Интересной особенностью Siege является то, что он может брать список URL-адресов из файла, а не работать только с одним.


Эти инструменты интересны тем, что вы измеряете не только время, необходимое для выполнения определенной части кода (как если бы вы использовали microtime непосредственно в вашем PHP-коде), но вы получаете все время, необходимое для обслуживания страницы.

Кроме того, он может тестировать не только PHP-код, поскольку он работает с HTTP-запросом, а не с самим кодом.

person Pascal MARTIN    schedule 16.03.2010

Есть много способов сделать это. Я лично был поклонником использования микровремени следующим образом:

// Start of code
$time = microtime(true); // Gets microseconds

// Rest of code

// End of code
echo "Time Elapsed: ".(microtime(true) - $time)."s";

Это даст вам микросекундную точность.

Если вы пишете сценарии командной строки (например, головоломки Facebook), вы можете использовать только время.

time php dancebattle.php ~/input.dat
Win

real    0m0.152s
user    0m0.142s
sys     0m0.012s

Я забыл о методе мониторинга времени загрузки страницы (из браузера). Для этого вы можете использовать вкладку NET в Firebug (для Firefox). Это позволит вам наблюдать за загрузкой различных файлов (AJAX, JS, CSS, изображения и т. д.).

person St. John Johnson    schedule 16.03.2010

  $ time curl http://www.example.com/

Обратите внимание, что он измеряет время всего запроса, включая задержку в сети. Но что, может быть, вы хотите?

person Martin Wickman    schedule 16.03.2010

Попробуйте https://github.com/fotuzlab/appgati.

Он позволяет определять шаги в коде и сообщает время, использование памяти, загрузку сервера и т. д. между двумя шагами.

Что-то типа:

    $appgati->Step('1');

    // Do some code ...

    $appgati->Step('2');

    $report = $appgati->Report('1', '2');
    print_r($report);

Пример выходного массива:

Array
(
    [Clock time in seconds] => 1.9502429962158
    [Time taken in User Mode in seconds] => 0.632039
    [Time taken in System Mode in seconds] => 0.024001
    [Total time taken in Kernel in seconds] => 0.65604
    [Memory limit in MB] => 128
    [Memory usage in MB] => 18.237907409668
    [Peak memory usage in MB] => 19.579357147217
    [Average server load in last minute] => 0.47
    [Maximum resident shared size in KB] => 44900
    [Integral shared memory size] => 0
    [Integral unshared data size] => 0
    [Integral unshared stack size] => 
    [Number of page reclaims] => 12102
    [Number of page faults] => 6
    [Number of block input operations] => 192
    [Number of block output operations] => 
    [Number of messages sent] => 0
    [Number of messages received] => 0
    [Number of signals received] => 0
    [Number of voluntary context switches] => 606
    [Number of involuntary context switches] => 99
)
person fotuzlab    schedule 10.06.2013
comment
интересно, но это не работает на окнах :-) и, возможно, у некоторых людей (например, у меня) есть окна вокруг .. : D - person Bogdan; 20.02.2014
comment
К сожалению, этот глупый сценарий женат на Unix. Попросите Windows попытать счастья в другом месте :) - person fotuzlab; 20.02.2014

Вы можете использовать microtime() в начале обработки и в конце выходных данных, затем вычислите разницу и при необходимости преобразуйте ее в секунды.

Это будет измерять только время выполнения для стороны PHP, а не все время загрузки страницы, по-видимому, в вашей ссылке, но это позволит вам, например, сравнить производительность различных методов.

person Benoit    schedule 16.03.2010
comment
... но вам нужно записать это где-нибудь, чтобы оно имело какую-либо ценность. - person symcbean; 16.03.2010
comment
конечно, вопрос был об измерении времени загрузки страницы для сравнения производительности кода. В чистом процессе отладки нет необходимости записывать его, просто отобразите разницу в два микровремени в нижнем колонтитуле страницы. Для глобального измерения производительности я бы предложил также использовать внешний инструмент, такой как Apache Bench. - person Benoit; 17.03.2010

Вы говорите, что хотите измерить "Время загрузки страницы", которое полностью отличается от

  1. время, необходимое для создания страницы (измеряется внутренним таймером в вашем PHP-коде)

  2. и разгрузить его с сервера (который измеряется ab)

Время загрузки страницы должно включать время, затрачиваемое на синтаксический анализ HTML и выполнение последующих запросов к серверу для получения всего соответствующего контента (файлы javascript, файлы css, изображения и т. д.).

Измерить это на самом деле довольно сложно. Чтобы сделать это правильно, вам нужно нажать всю логику на стороне клиента - удалить файл cookie javascript с отметкой времени, когда пользователь нажимает на ссылку или отправляет форму, а затем на следующей странице, используя метод onload (который срабатывает после того, как все загружено) сравнил это время с текущим временем. Затем вам нужен метод передачи этой метрики обратно на сервер — вы можете использовать запрос Ajax или сохранить время в другом файле cookie, который будет представлен в последующем запросе.

Обратите внимание, что файлы, необходимые каждому клиенту, будут зависеть от текущего состояния кэша на стороне браузера.

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

person symcbean    schedule 16.03.2010

  1. метод первый: используйте xdebug.
  2. метод второй: поместите эти утверждения вокруг ваших скриптов

    $TIMER['label']=microtime(1);
    /* some code */
    $TIMER['sql1_before']=microtime(1);
    a/* some code */
    $TIMER['sql1_after']=microtime(1);
    /* some code */

а затем вывести его с таким кодом:

  echo "<table border=1><tr><td>name</td><td>so far</td><td>delta</td><td>per cent</td></tr>";
  reset($TIMER);
  $start=$prev=current($TIMER);
  $total=end($TIMER)-$start;
  foreach($TIMER as $name => $value) {
    $sofar=round($value-$start,3);
    $delta=round($value-$prev,3);
    $percent=round($delta/$total*100);
    echo "<tr><td>$name</td><td>$sofar</td><td>$delta</td><td>$percent</td></tr>";
    $prev=$value;
  }
    echo "</table>";

Таким образом, вы получите подробный отчет о том, как работает ваш код. это действие называется profiling и занимает самое важное место в процессе оптимизации.

person Your Common Sense    schedule 16.03.2010

Вывод в этой презентации, похоже, скопирован из Siege (http://www.joedog.org/index/siege-home).

Firebug — еще один весьма полезный инструмент для тестирования производительности в «реальных условиях» всего стека приложений (http://getfirebug.com/) и YSlow (http://developer.yahoo.com/yslow/)

person MGriesbach    schedule 16.03.2010

Используя PHP-функцию microtime(), вы будете точно знать, сколько времени потребуется для выполнения вашего PHP-кода. Выполните следующие действия, чтобы разместить код PHP на своей веб-странице:

Поместите следующий код в самый верх вашей страницы PHP (если вы измеряете время, необходимое для определенной части кода, поместите его прямо перед этой частью кода PHP)

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

Следующий код должен быть размещен в самом конце веб-страницы (или в конце части кода PHP)

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

Если не работает, используйте microtime(true) вместо microtime()

person Suneel Kumar    schedule 12.08.2014

Поместите следующий код вверху страницы PHP.

<?php
$statrttime = microtime();
$time = explode(' ', $statrttime);
$time = $time[1] + $time[0];
$start = $time;
?>

Следующий код должен быть помещен в конце вашей страницы.

<?php
$endtime = microtime();
$time = explode(' ', $endtime);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 4);
echo 'Page load in '.$total_time.' seconds.';
?>

Примечание. Если вы измеряете время для определенной части кода, поставьте эту правую начальную и последнюю часть кода PHP.

person Shoaib Quraishi    schedule 15.01.2018