лучший способ измерить (и уточнить) производительность с помощью PHP?

Сайт, с которым я работаю, начинает немного вялым, и я бы хотел его доработать. Я думаю, что проблема связана с PHP, но я не могу быть уверен. Как я могу узнать, как долго выполняются функции?

Solutions Collecting From Web of "лучший способ измерить (и уточнить) производительность с помощью PHP?"

Если вы хотите проверить время выполнения:

<?php $startTime = microtime(true); // Your content to test $endTime = microtime(true); $elapsed = $endTime - $startTime; echo "Execution time : $elapsed seconds"; ?> 

Попробуйте функцию профилирования в XDebug или Zend Debugger?

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

http://codeaid.net/php/calculate-script-execution-time-%28php-class%29

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

PHP имеет сборщик мусора и довольно сложный менеджер памяти. Объем памяти, используемый вашим скриптом. может идти вверх и вниз во время выполнения скрипта. Чтобы получить текущее использование памяти, мы можем использовать функцию memory_get_usage (), а для получения максимального объема памяти, используемого в любой точке, мы можем использовать функцию memory_get_peak_usage (). просмотреть plaincopy для clipboardprint?

  echo "Initial: ".memory_get_usage()." bytes \n"; /* prints Initial: 361400 bytes */ // let's use up some memory for ($i = 0; $i < 100000; $i++) { $array []= md5($i); } // let's remove half of the array for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* prints Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* prints Peak: 13687072 bytes */ с  echo "Initial: ".memory_get_usage()." bytes \n"; /* prints Initial: 361400 bytes */ // let's use up some memory for ($i = 0; $i < 100000; $i++) { $array []= md5($i); } // let's remove half of the array for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* prints Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* prints Peak: 13687072 bytes */ 

http://net.tutsplus.com/tutorials/php/9-useful-php-functions-and-features-you-need-to-know/

PK

  • Вы также можете сделать это вручную, записав значение microtime () в разных местах, например:

     <? $TIMER['start']=microtime(TRUE); // some code $query="SELECT ..."; $TIMER['before q']=microtime(TRUE); $res=mysql_query($query); $TIMER['after q']=microtime(TRUE); while ($row = mysql_fetch_array($res)) { // some code } $TIMER['array filled']=microtime(TRUE); // some code $TIMER['pagination']=microtime(TRUE); /and so on ?> 

а затем визуализировать его

 <? if ('127.0.0.1' === $_SERVER['REMOTE_ADDR']) { 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>"; } ?> 

проверка IP-адреса означает, что мы делаем это профилирование на рабочем сайте

  • Хотя я сомневаюсь, что это сам PHP. Скорее всего, это база данных. Поэтому обратите внимание на время выполнения запроса.

  • однако термин «сайт» очень широк. Он включает также JS, CSS, изображения и прочее. Итак, я бы предложил начать создание страницы FirebFug Net, чтобы увидеть, какая часть всей страницы занимает больше времени.

Конечно, очистка может быть выполнена только после анализа результатов профилирования, и здесь не может быть рекомендовано без нее.

Ваш лучший выбор – Xdebug. Я счастлив, поскольку он поставляется в комплекте с моей PHPed IDE. Я могу получить данные профилирования одним нажатием кнопки.

Так что, возможно, вы могли бы подумать об этом.

У меня были подобные проблемы, поэтому я создал две новые таблицы в базе данных и две новые функции. Один из них был audit_sql, а другой – audit_code. Поскольку я использовал класс абстракции SQL, было легко выполнить каждый вызов SQL (я использовал php microtime, как это предлагали некоторые другие). Итак, я назвал microtime до и после вызова SQL и сохранил результаты в базе данных.

Аналогично со страницами. Я назвал microtime в начале и в конце каждой страницы и, если необходимо, в начале и конце functons, divs – все, что я думал, могло быть преступником.

Общие результаты:

  1. SQL-запросы к MySQL были почти мгновенными и вообще не были проблемой. Единственное, что я бы сказал, это то, что даже я был удивлен тем, что число казнено! Сайт создается из базы данных – даже меню, разрешения и т. Д. Чтобы создать домашнюю страницу, SQL-запросы были измерены в 100-х годах.

  2. PHP не был виновником. Это было еще более мгновенно, чем MySQL.

  3. Преступник был … (большое наращивание!) Звонки в You Tube и Picassa и другие подобные сайты. Я размещаю видео и фотоальбомы на сайте (ну, на самом деле, я их не храню – они хранятся на YT и т. Д.), А на домашней странице – это миниатюры, которые извлекаются из You Tube и т. П. Через API-интерфейс You Tube PHP / Zend Framework. Поскольку это все http на других сайтах, каждый из них принимал 1, 2 или 3 секунды. Это приводило к тому, что эти divs, содержащие их, занимали от 6 до 12 секунд, а домашняя страница – до 17 секунд.

Решение – сохранить все миниатюры на моем сервере. В первый раз нужно обслуживать с удаленного сайта (YT, Picassa и т. Д.), Поэтому сделайте это, а затем сохраните на своем собственном сайте. В будущем, вы проверяете, есть ли у вас это, и если да, то всегда используйте его с вашего сервера. Сокращает время загрузки страницы до 2-3 секунд. Предоставленный первый человек для просмотра первой загрузки домашней страницы после того, как кто-то загрузил больше видео / изображений, потребуется некоторое время, но не после этого. Люди будут устанавливать длительное одноразовое время загрузки страницы до их подключения / Интернета в целом. Слишком много медленных нагрузок вашего сайта, и они остановят посещение!

Надеюсь, что это поможет.