Я хочу знать, как лучше всего протестировать мои PHP-скрипты. Неважно, это задание cron, веб-страница или веб-сервис.
Я знаю, что могу использовать microtime, но действительно ли он дает мне реальное время PHP-скрипта?
Я хочу протестировать и протестировать различные функции PHP, которые делают то же самое. Например, preg_match
vs strpos
или domdocument
vs preg_match
или preg_replace vs str_replace`
Пример веб-страницы:
<?php
// login.php
$start_time = microtime(TRUE);
session_start();
// do all my logic etc...
$end_time = microtime(TRUE);
echo $end_time - $start_time;
Это выведет: 0,0146126717 (все время меняется, но это последний, что я получил). Это означает, что для выполнения сценария PHP потребовалось около 0,015.
Есть ли способ лучше?
Ответы:
Если вы действительно хотите протестировать реальный код, используйте такие инструменты, как Xdebug и XHProf .
Xdebug отлично подходит, когда вы работаете в dev / staging, а XHProf - отличный инструмент для производства, и запускать его там безопасно (если вы читаете инструкции). Результаты загрузки одной отдельной страницы не будут иметь такого значения, как просмотр того, как работает ваш код, в то время как сервер вынужден выполнять еще миллион других вещей, а ресурсы становятся дефицитными. Это поднимает другой вопрос: неужели у вас узкое место в ЦП? ОЗУ? I / O?
Вам также нужно смотреть не только на код, который вы запускаете в своих скриптах, но и на то, как обслуживаются ваши скрипты / страницы. Какой веб-сервер вы используете? В качестве примера я могу заставить nginx + PHP-FPM серьезно работать с mod_php + Apache, который, в свою очередь, не может обслуживать статический контент с использованием хорошего CDN.
Следующее, что нужно учитывать, - это то, для чего вы пытаетесь оптимизировать?
Первому можно помочь, выполнив сжатие всех ресурсов, отправленных в браузер, но это может (в некоторых случаях) оттолкнуть вас от достижения последнего.
Надеюсь, все вышеперечисленное может помочь показать, что тщательно изолированное «лабораторное» тестирование не будет отражать переменные и проблемы, с которыми вы столкнетесь в производственной среде, и что вы должны определить свою цель высокого уровня и затем, что вы можете сделать для ее достижения. прежде чем отправиться к черту по пути микро / преждевременной оптимизации .
источник
AllowOveride
заставляя Apache просматривать целые каталоги для файлов .htaccess при каждом запросе. Уже одно это уводит Apache с его собственного пути.Чтобы оценить, насколько быстро ваш полный скрипт работает на сервере, вы можете использовать множество инструментов. Сначала убедитесь, что ваш скрипт (например, preg_match vs strpos) должен выдавать те же результаты, чтобы ваш тест прошел квалификацию.
Ты можешь использовать:
источник
Вы захотите взглянуть на Xdebug и, в частности, на возможности профилирования Xdebug .
В принципе, вы включите профайлер, и каждый раз при загрузке веб - страницы , что создает файл похожего на Cachegrind , который может быть прочитан с WinCachegrind или KCacheGrind .
Xdebug может быть немного сложно настроить, поэтому вот соответствующий раздел моего
php.ini
справочника:А вот скриншот
.out
файла в WinCacheGrind :Это должно предоставить достаточно подробностей о том, насколько эффективен ваш PHP-скрипт. Вы хотите сосредоточиться на том, что отнимает больше всего времени. Например, вы можете оптимизировать одну функцию, чтобы она занимала половину времени, но ваши усилия лучше поддержать оптимизацию функции, которая вызывается десятки, если не сотни раз во время загрузки страницы.
Если вам интересно, это просто старая версия CMS, которую я написал для себя.
источник
Попробуйте https://github.com/fotuzlab/appgati
Он позволяет определять шаги в коде и сообщает время, использование памяти, загрузку сервера и т. Д. Между двумя шагами.
Что-то вроде:
Пример выходного массива:
источник
SetMemory()
) вместо уродливой, но все же вездесущейmixedCase()
чуши, которая в любом случае практически бессмысленна в PHP. Вы, наверное, слишком стары. ;))Я бы посмотрел на xhprof . Не имеет значения, запущен ли он на cli или через другой сапи (например, fpm, fcgi или даже модуль Apache).
Самое лучшее в xhprof - это то, что он достаточно подходит для работы в производственной среде. Что-то, что не работает с xdebug (последний раз проверял). xdebug влияет на производительность, а xhprof (я бы не сказал, что его нет) работает намного лучше.
Мы часто используем xhprof для сбора образцов с реальным трафиком, а затем анализируем код оттуда.
Это не совсем эталон с точки зрения того, что он дает вам время и все такое, хотя он тоже делает это. Это просто упрощает анализ производственного трафика, а затем его детализацию до уровня функции php в собранном графе вызовов.
После того, как расширение скомпилировано и загружено, вы начинаете профилирование кода с помощью:
Остановиться:
Затем сохраните данные в файл или базу данных - все, что плавает на вашей лодке и не прерывает обычную работу. Мы асинхронно отправляем это на S3, чтобы централизовать данные (чтобы иметь возможность видеть все запуски со всех наших серверов).
Код на GitHub содержит xhprof_html папки, вы сваливать на сервере и с минимальной конфигурацией, вы можете визуализировать данные , собранные и начать бурение вниз.
НТН!
источник
Поместите его в
for
цикл, чтобы сделать каждую вещь 1 000 000 раз, чтобы получить более реалистичное число. И запускайте таймер только непосредственно перед кодом, который вы действительно хотите протестировать, затем записывайте время окончания сразу после (то есть не запускайте таймер до того, какsession_start()
.Также убедитесь, что код идентичен для каждой функции, которую вы хотите протестировать, за исключением функции, которую вы синхронизируете.
То, как выполняется скрипт (cronjob, php из командной строки, Apache и т. Д.), Не должно иметь значения, поскольку вы измеряете только относительную разницу между скоростью различных функций. Так что это соотношение должно оставаться неизменным.
Если на компьютере, на котором вы запускаете тест, происходит много других процессов, это может повлиять на результаты теста, если произойдет всплеск использования ЦП или памяти другим приложением во время выполнения теста. Но пока у вас есть много свободных ресурсов на компьютере, я не думаю, что это будет проблемой.
источник
Хорошее начало - использовать профилировщик xdebugs http://xdebug.org/docs/profiler
Возможно, это не самая простая вещь в настройке и использовании, но как только вы начнете работать, огромные объемы данных и простота просмотра станут незаменимыми.
источник
Эрик,
Вы задаете себе неправильный вопрос. Если ваш скрипт выполняется за ~ 15 мсек, его время в значительной степени не имеет значения. Если вы работаете с общей службой, активация образа PHP займет ~ 100 мс, чтение из файлов сценария ~ 30-50 мс, если оно полностью кэшировано на сервере, возможно, 1 или более секунд, если загружается из серверной фермы NAS. Сетевые задержки при загрузке мебели страницы могут добавить много секунд.
Основной проблемой здесь является восприятие пользователями времени загрузки: сколько времени ему или ей нужно ждать между нажатием на ссылку и получением полностью отрисованной страницы. Взгляните на Google Page Speed, которое вы можете использовать как расширение Ff или chrome, и документацию Pagespeed, в которой подробно обсуждается, как добиться хорошей производительности страницы. Следуйте этим рекомендациям и постарайтесь получить рейтинг своей страницы выше 90/100. (Домашняя страница Google имеет рейтинг 99/100, как и мой блог). Это лучший способ добиться хорошей производительности, воспринимаемой пользователем.
источник
Также хорошо следить за своим PHP-кодом и перекрестно проверять эту ссылку , чтобы убедиться, что ваше кодирование само по себе потенциально не влияет на производительность приложения.
источник