Как читать html отчеты NYTProf?
Я полностью сбит с толку отчетами Devel::NYTProf, сгенерированными nytprofhtml. Я использую старую версию NYTProf 1.90. Я знаю, что это очень старая версия, но следует использовать ее по ряду причин.
Таким образом, эти HTML-отчеты выглядят примерно так (при просмотре определенного отчета *.pl-файла):
|Line|Stmts.| Time | Avg. |Code|
|42 | 6804 | 0.04506 | 7e-06 | }; |
Я никогда не видел отчетов из новой версии nytprofhtml, поэтому не уверен, что они выглядят одинаково.
В моем случае эта строка является самой медленной частью всей программы (это не маленькая программа). Поэтому мой вопрос: как можно утверждать, что это '};' быть самой медленной частью в программе с гораздо более сложными утверждениями. Я думаю, что неправильно понимаю, что сообщает NYTProf.
Если мой вопрос сбивает с толку, просто дайте мне определения каждого столбца из этих отчетов, это поможет? Это очень поможет.
Особенно мне интересно, что Stmts
, имею в виду. Я догадываюсь, но я не хочу угадывать!
Заранее спасибо.
1 ответ
Stmts.
это число раз выполнения оператора или, точнее, количества перемещений выполнения из оператора, связанного с этой строкой (что не всегда является точным), в зависимости от того, какой оператор был выполнен следующим.
Time
сумма времени, затраченного на выполнение операторов, связанных с этой строкой.
Avg.
это просто Time
деленное на Stmts.
Эти выдержки из текущей документации Devel::NYTProf могут помочь:
Профилировщик операторов измеряет время между вводом одного оператора perl и вводом следующего. Всякий раз, когда выполнение достигает нового оператора, время с момента ввода предыдущего оператора вычисляется и добавляется к времени, связанному со строкой исходного файла, с которого начинается предыдущий оператор. [...]
Например, учитывая:
while (<>) {
...
1;
}
После первого цикла, любое дополнительное время, потраченное на оценку условия (ожидание ввода в этом примере), будет записано как потраченное на последний оператор, выполненный в цикле.
Более поздние версии NYTProf, которых существует много, предлагают гораздо более точную синхронизацию для этой ситуации, перехватывая соответствующие коды операций внутреннего цикла, а также многие другие существенные улучшения.