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

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

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

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

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

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

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

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

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

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

Есть много способов сделать это. Я лично был поклонником использования 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, изображения и т. Д.).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Используя функцию 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 ()