линт (очень похожий инструмент с открытым исходным кодом, названный шплинт )
"self" означает время, затраченное этой функцией, но не всеми функциями, которые она звонки. Если "self" низкий и "вкл." высокий, то оптимизировать лучше всего в одном из потомков (например, в вызываемых функциях). В этом случае похоже, что mysql-запрос занимает большую часть времени, поэтому вы, вероятно, захотите оптимизировать запрос (если возможно). Причина, по которой mysql_qeury
имеет "self" == "incl." заключается в том, что профилировщик не может видеть функцию, поскольку он выполняет свою работу за пределами среды выполнения php (например, в клиентской библиотеке mysql)
Я могу добавить, что 10067 вызовов mysql_query
действительно выглядят очень подозрительно. Запрос к базе данных - очень дорогая операция. Вы уверены, что не можете каким-то образом уменьшить количество запросов?
Редактировать:
Я могу попробовать. А как же Incl.? Как это 80 в конце, а затем 70 в запросе mysql, как это соотносится с общим процентом, который должен составлять 100%
Числа не нужно складывать. Вы смотрите на отсортированный список всего времени, которое занимают эти функции. Это не граф вызовов (хотя часто бывает, что это каким-то образом имитирует).
Предположим, что следующий код:
function fn1() {
sleep(1);
fn2();
}
function fn2() {
sleep(98);
}
function fn3() {
sleep(1);
}
fn1();
fn3();
Что может дать следующий результат:
name | incl. | self
main | 100% | 0%
fn1 | 99% | 1%
fn2 | 98% | 98%
fn3 | 1% | 1%
Когда вы сортируете список по «вкл.», Вы ищут медленные функции в совокупности . Другими словами, те, которые имеют здесь высокие оценки, не обязательно медленные, но они вызывают другие функции, которые таковыми являются. Если функция получает высокий балл "вкл." и имеют много вызовов, вам следует попытаться уменьшить количество вызовов этой функции или позволить функции кэшировать свой результат (работает только в том случае, если это запрос, а не действие).
При сортировке по «я» вы увидите фактические вызовы, которые занимают больше всего времени. Это те функции, которые вы хотели бы настроить. В большинстве сценариев PHP вы обнаружите, что в этом поле преобладает mysql_query
. Если у вас много звонков, попробуйте еще раз уменьшить их или кешировать. Если у вас мало звонков, то вам, вероятно, нужно оптимизировать sql-запрос. PHP-отладчик в этом вам не поможет. Вместо, найти фактический запрос и запустить объяснение
по нему в консоли mysql. Это отдельная глава.
Self означает время, проведенное в функция, исключая любые функции, которые она вызывает.
Например:
function foo()
{
bar();
}
function bar
{
sleep(1);
}
foo();
Это даст вам:
Incl Self Func
1 0 foo
1 0 bar
1 1 sleep <- Here's the bottleneck!