Время загрузки страницы Benchmarking PHP

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

Несколько как статистика, доступная здесь - http://talks.php.net/show/drupal08/24

17
задан Anant 16 March 2010 в 12:12
поделиться

7 ответов

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

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

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


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

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


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

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

11
ответ дан 30 November 2019 в 10:06
поделиться

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

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

43
ответ дан 30 November 2019 в 10:06
поделиться

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

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

2
ответ дан 30 November 2019 в 10:06
поделиться

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

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

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

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

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

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

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

2
ответ дан 30 November 2019 в 10:06
поделиться
  1. метод первый: используйте xdebug.
  2. метод второй: Поместите эти операторы в свои сценарии

    $ TIMER ['label'] = microtime (1);
    / * некоторый код * /
    $ TIMER [ 'sql1_before'] = microtime (1);
    a / * некоторый код * /
    $ TIMER ['sql1_after'] = microtime (1);
    / * некоторый код * /

а затем выведите его с помощью следующего кода:

  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>";

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

1
ответ дан 30 November 2019 в 10:06
поделиться

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

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

0
ответ дан 30 November 2019 в 10:06
поделиться
  $ time curl http://www.example.com/

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

9
ответ дан 30 November 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: