Как интерпретировать журналы профилирования моего веб-приложения Zend? - PullRequest
3 голосов
/ 29 июня 2011

Я просто новичок в профилировании веб-приложений. Какую информацию я могу получить в профиле? и как узнать, где мне нужно работать, чтобы ускорить работу моего приложения.
У меня есть образец страницы профиля Zend-приложения, который я не знаю, как интерпретировать:

enter image description here

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Первое, что нужно сделать, это отсортировать результаты по сперме. Самое большое узкое место - самое длинное. Затем покопайтесь и посмотрите, что делает эта подпрограмма, и попробуйте найти циклы, содержащие другие методы. Посмотрите количество посещений (вызовов) этих вложенных методов и время, которое они заняли.

Например, допустим, что MyFunc занимает больше всего времени, вы смотрите на него и видите, что у него есть цикл, выполняющий некоторые вещи. Посмотрите в цикле, вы можете увидеть, что MyOtherFunc вызывается внутри цикла, посмотрите снова на таблицу и найдите MyOtherFunc. Звонили 200 раз? Посмотрите, можете ли вы вывести MyOtherFunc из цикла (нужна ли ему переменная переменная в качестве входных данных?).

Например, в псевдокоде, если вы видите это:

FOR (MyVar = 0 TO GetItems().Count) {
  print GetItems()[MyVar].Name;
}

Если GetItems возвращает 100 элементов, метод GetItems будет вызываться 200 раз. Профилировщик укажет на такой недостаток большим количеством хитов. Таким образом, вы входите и кэшируете результат в локальной переменной:

var TempVar = GetItems();
FOR (MyVar = 0 TO TempVar.Count) {
  print TempVar[MyVar].Name;
}

Теперь он будет вызываться только один раз. Профиль еще раз и сравните свои результаты.

Предупреждение: профилирование может вызвать привыкание, как только вы его освоите!

1 голос
/ 29 июня 2011

Нужное вам число - общее кумулятивное время - игнорируйте собственные (собственные) времена, количество вызовов и среднее время.

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

Другой способ - просто прервать сценарий вручную и записать стек вызовов несколько раз.Если вы внимательно посмотрите на эти образцы стека, вы увидите, какие именно строки кода расходуют большую часть времени. Подробнее об этом.

...