Концептуальный вопрос по оптимизации "узких мест" PHP кода

denver

?>Скриптер
Концептуальный вопрос по оптимизации "узких мест" PHP кода

Недавно столкнулся с проблемой выявления узких мест в коде (строк забирающих слишком много процессорного времени) а именно вставкой что-то типа $trace->chekpoint(__LINE__) ну скажем в каждой десятой строке кода (не ООП). В конце выводим массив всех чекпоинтов (сгруппированным по __LINE__ с просумированным временем на каждый). Ну вобщем идея понятна я думаю.

Однако есть недостатки такого трэйсинга, не буду вдаваться какие (если надо поясню). Самое главное что это очень утомительно вставлять такие строки и затем разбираться в отчете.

Мне пришло в голову может и тривиальная идея: раз уж PHP это интерпретируемый язык то он ведь мог бы гипотетически подсчитывать время выполнения каждой строки кода во время выполнения? Уж не знаю как бы он выводил эту информацию, однако скажем в идеальном редакторе кода каждая линия подсвечивалась бы градацией бэкграунда от зеленого (среднее время выполнения) к красному (максимальное время выполнения). Скажем оптимизированный код тогда состоял бы только из зеленых строчек за исключением пары известных узких мест :D
Понятно что эти подсчеты сами по себе были бы ресурсоемкими, однако можно ж было бы их и отключать какой-либо директивой на недевелоперском сервере.

Может ли кто объяснить почему это до сих пор не реализовано? Есть ли подводные камни или просто в голову никому пока не приходило? :confused:

ЗЫ. Первый пост, прошу сильно не пинать :rolleyes:
 

Shturm

Гигант мысли
Зачем подсчитывать время выполнения строк?
Может лучше сосредоточиться на вызовах функций?
Посмотри xdebug, например.
оптимизированный код тогда состоял бы только из зеленых строчек за исключением пары известных узких мест
Здается мне что зелеными будут только комментарии:)
 

denver

?>Скриптер
Shturm
Автор оригинала: Shturm
Посмотри xdebug, например
Касательно времени выполнения нашел только
xdebug_time_index() - returns the time since the start of the script
Однако это лишь часный случай того что мне нужно. А мне нужен отчет вида:

PHP:
Debug started: 15:00:12

...

Dbug finished: 15:30:12
Total time used: 30 min
Total memory used: 234930

Checkpoints:
1. Preparing to reading a line from file (line 15)
   Time used: 0 sec (0%)
2. Finished reading a line from file (line 15)
   Time used: 20 min (66%)
3. Preparing to save to DB (line 34)
   Time used: 0 sec (0%)
4. Saved to DB (line 35)
   Time used: 10 min (33%)
Автор оригинала: denver
линия подсвечивалась бы градацией бэкграунда от зеленого (среднее время выполнения)
Автор оригинала: Shturm
Здается мне что зелеными будут только комментарии:)
Каменты не могут иметь среднее время выполнения.
 

die_hard

Новичок
Есть предложение не изобретать велосипед а делать следующим образом
1 - Все равно код сгруппируется в некоторое подобие ядра, модулей и т.д. Если к этому сейчас не движется дело, то форсировать.
2 - после успешного завершения 1 шага использовать зендовский профайлер. а потом уже в один раз! найди все узкие месте и один раз! их исправить. Естественно, относится все в уже написанному коду.
3 - после обнаружения сильного торможения (после добавления новых фич) проекта - повторяем 1 и 2 шаг.
 
Сверху