Подтвердить что ты не робот

Бенчмаркинг времени загрузки страниц PHP

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

Скорее всего, статистика, доступная здесь, http://talks.php.net/show/drupal08/24

4b9b3361

Ответ 1

Самым простым является Apache Bench (называемый ab), который предоставляется с Apache:

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

Кажется, это соответствует очень простой отчетности, представленной на вашем слайде.
(На самом деле он сообщает об этом больше)


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

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


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

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

Ответ 2

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

// 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, изображения и т.д.).

Ответ 3

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

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

Ответ 4

Попробуйте 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
)

Ответ 5

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

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

Ответ 6

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

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

  • и выгрузите его с сервера (который измеряется с помощью ab)

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

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

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

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

Ответ 7

  • метод один: используйте xdebug.
  • метод два: Поместите эти утверждения вокруг своих сценариев.

    $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 и занимает самое важное место в процессе оптимизации.

Ответ 9

Используя функцию microtime() PHP, вы точно знаете, сколько времени потребуется для выполнения вашего 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()

Ответ 10

Поместите следующий код вверху страницы 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.