Как я могу измерить скорость кода, написанного в PHP?

Так, сначала Вы определяете идеальный цикл JavaScript, я полагаю, что он должен быть похожим на это:

ary.each (функция () {$arguments [0]) .remove ();})

Это может потребовать prototype.js библиотеки.

Затем, Вы получаете disgustet с аргументами [0] часть и имеете код быть произведенными автоматически из Вашей серверной инфраструктуры. Это работает, только если лестничная структура является Побережьем.

Теперь, Вам генерировали вышеупомянутое:

ary делают: [: каждый | каждый элемент удаляет].

Это прилагается завершение синтаксиса и переводит точно в вышеупомянутый JavaScript. И это заставит голову кружиться людей, которые не использовали интеграцию прототипа побережий прежде, поскольку они читают Ваш код. Это уверенный заставляет Вас чувствовать себя спокойными, также. Не говоря уже об усилении в гиковатости можно добраться здесь. Девочки любят его!

113
задан M. A. Kishawy 11 November 2014 в 21:01
поделиться

6 ответов

У вас есть (по крайней мере) два решения:

Довольно "наивное" решение - использовать микровремя (истинное) до и после части кода, чтобы получить сколько времени прошло при его исполнении; в других ответах говорилось об этом и уже приводились примеры, поэтому я больше не скажу.

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

Что-то вроде этого, поэтому, если вы хотите знать, сколько времени потребуется для сериализации массива:

$before = microtime(true);

for ($i=0 ; $i<100000 ; $i++) {
    serialize($list);
}

$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";

Не идеально, но полезно, и это не занимает много времени на настройку.



Другое решение, которое отлично работает, если вы хотите определить, какая функция занимает много времени во всем скрипте, использовать:

  • Расширение Xdebug для генерации данных профилирования для скрипта
  • Программное обеспечение, которое считывает данные профилирования и представляет вам что-то читаемое. Я знаю троих из них:
    • Webgrind ; веб интерфейс ; должен работать на любом сервере Apache + PHP
    • WinCacheGrind ; только в windows
    • KCacheGrind ; возможно только Linux и Linux-подобные; Я предпочитаю его, кстати

Чтобы получить файлы профилирования, вам необходимо установить и настроить 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: http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif
(источник: sourceforge.net )

Вы получите точно то же самое со скриптами PHP ;-)
(Я имею в виду, что с KCacheGrind; WinCacheGrind не так хорош, как KCacheGrind ...)

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

Обратите внимание, что Xdebug подсчитывает время процессора, затраченное PHP; когда PHP ожидает ответа от базы данных (например), он не работает; только ожидание. Так что Xdebug подумает, что запрос к БД не займет много времени!
Это должно быть профилировано на сервере SQL, а не на PHP, поэтому ...


Надеюсь, это будет полезно :-)
Удачи!

181
ответ дан 24 November 2019 в 02:41
поделиться

Для быстрой работы я делаю это (в PHP):

$startTime = microtime(true);
doTask(); // whatever you want to time
echo "Time:  " . number_format(( microtime(true) - $startTime), 4) . " Seconds\n";

Вы также можете использовать профилировщик, например http://xdebug.org/ .

40
ответ дан 24 November 2019 в 02:41
поделиться

Если это что-то, что можно протестировать вне веб-контекста, я просто использую команду Unix time .

3
ответ дан 24 November 2019 в 02:41
поделиться

В Zend Studio встроена поддержка профилирования с использованием XDebug или ZendDebugger. Он профилирует ваш код, сообщая вам, сколько времени заняла каждая функция. Это фантастический инструмент для определения ваших узких мест.

3
ответ дан 24 November 2019 в 02:41
поделиться

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

1
ответ дан 24 November 2019 в 02:41
поделиться

В последнее время я использую XHProf http://pecl.php.net/package/xhprof . Первоначально он был разработан Facebook и имеет приличный веб-интерфейс.

5
ответ дан 24 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

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