Как я могу сказать, какой из многих классов (выполняющих одну и ту же работу) выполняется быстрее? есть программное обеспечение для измерения этого?
источник
Как я могу сказать, какой из многих классов (выполняющих одну и ту же работу) выполняется быстрее? есть программное обеспечение для измерения этого?
У вас есть (как минимум) два решения:
Довольно "наивный" метод - использовать микровремя (истина) до и после части кода, чтобы узнать, сколько времени прошло во время его выполнения; в других ответах говорилось об этом и уже приводились примеры, поэтому я не скажу больше.
Это хорошее решение, если вы хотите протестировать пару инструкций; например, сравнить два типа функций - лучше, если это будет сделано тысячи раз, чтобы убедиться, что любой "возмущающий элемент" усреднен.
Что-то вроде этого, так что, если вы хотите знать, сколько времени требуется для сериализации массива:
$before = microtime(true);
for ($i=0 ; $i<100000 ; $i++) {
serialize($list);
}
$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";
Не идеально, но полезно и не требует много времени на настройку.
Другое решение, которое неплохо работает, если вы хотите определить, какая функция занимает много времени во всем скрипте, - это использовать:
Чтобы получить файлы профилирования, вам необходимо установить и настроить Xdebug; взгляните на страницу документации по профилированию PHP-скриптов .
Обычно я не включаю профилировщик по умолчанию (он генерирует довольно большие файлы и замедляет работу) , а использую возможность отправки параметра, называемого XDEBUG_PROFILE
данными GET, чтобы активировать профилирование только для нужной мне страницы.
Часть моего php.ini, связанная с профилированием, выглядит так:
xdebug.profiler_enable = 0 ; Profiling not activated by default
xdebug.profiler_enable_trigger = 1 ; Profiling activated when requested by the GET parameter
xdebug.profiler_output_dir = /tmp/ouput_directory
xdebug.profiler_output_name = files_names
(Прочтите документацию для получения дополнительной информации)
Этот снимок экрана взят из программы C ++ в KcacheGrind: (источник: sourceforge.net ) Вы получите точно такие же вещи и со сценариями PHP ;-)
(Я имею в виду, что с KCacheGrind; WinCacheGrind не так хорош, как KCacheGrind ... )
Это позволяет получить представление о том , что хорошем занимает много времени в вашем приложении - и он иногда определенно помогает найти в функцию, замедляя все вниз ^^
Обратите внимание, что Xdebug подсчитывает время процессора, затраченное PHP; когда PHP ожидает ответа от базы данных (например), он не работает; только ожидание. Так что Xdebug подумает, что запрос к БД не займет много времени!
Это должно быть профилировано на SQL-сервере, а не на PHP, поэтому ...
Надеюсь, это будет полезно :-)
Удачи!
Для быстрых вещей я делаю это (на PHP):
Вы также можете использовать профилировщик, например http://xdebug.org/ .
источник
Я сделал простой класс времени, может быть, кому-то пригодится:
Использование:
источник
echo
, а не$echo
Обновление 2020
Прошло много лет с тех пор, как я последний раз отвечал на эти вопросы, поэтому я подумал, что это заслуживает обновления в области APM.
Первоначальный ответ: октябрь 2015 г.
Вот прямой ответ на ваш вопрос
Да, есть. Мне интересно, почему никто об этом еще не упомянул. Хотя предложенные выше ответы подходят для быстрой проверки, но не масштабируются в долгосрочной перспективе или для более крупного проекта.
Почему бы не использовать инструмент мониторинга производительности приложений (APM), который создан именно для этого и многого другого. Ознакомьтесь с NewRelic, AppDynamics, Ruxit (у всех есть бесплатная версия), чтобы отслеживать время выполнения, использование ресурсов, пропускную способность каждого приложения на уровне методов.
источник
Если вы хотите быстро проверить производительность фреймворка, вы можете поместить файл index.php
Каждый раз вы будете получать время выполнения в миллисекундах . Потому что микросекунды не слишком полезны при тестировании фреймворка.
источник
В последнее время я использую XHProf http://pecl.php.net/package/xhprof . Первоначально он был разработан Facebook и имеет приличный веб-интерфейс.
источник
Я хотел бы поделиться с вами самодельной функцией, которую я использую для измерения скорости любой существующей функции до 10 аргументов:
пример
Возвращает
источник
Если это что-то, что можно протестировать вне веб-контекста, я просто использую команду Unix
time
.источник
Zend Studio имеет встроенную поддержку профилирования с помощью XDebug или ZendDebugger. Он профилирует ваш код, сообщая вам, сколько времени заняла каждая функция. Это фантастический инструмент для определения ваших узких мест.
источник
Вы можете использовать базовые вещи, такие как хранение меток времени или microtime () до и после операции, чтобы вычислить необходимое время. Это легко сделать, но не очень точно. Возможно, лучшим решением является Xdebug , я никогда не работал с ним, но, похоже, это самый известный отладчик / профилировщик PHP, который я могу найти.
источник