“self”表示该函数所用的时间,而不是它调用的任何函数。如果“self”低,“incl”。是高的,那么最优化的最佳地点可能是在一个孩子中(例如,称为函数)。在这种情况下,它看起来像mysql-query大部分时间,所以你可能想优化查询(如果可能)。之所以mysql_qeury有“self”==“incl。”是profiler不能看到函数,因为它是在php运行时之外(例如在mysql客户端库中)做它的工作,
我可能补充说,10067调用mysql_query看起来可怕的可疑。数据库查询是一个非常昂贵的操作。你确定你不能减少查询的数量吗?
编辑:
I can try. But what about the Incl.? How is it 80 in the close and then 70 in the mysql query how does that relate to the total percentage which should be 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%
当您按“incl。”对列表排序时,您将查看聚合速度较慢的函数。换句话说,在这里得分高的,不一定慢,但他们调用其他的功能。如果一个函数在“incl”上得分较高。并且有很多调用,你应该考虑尝试减少调用这个函数的数量,或者让函数缓存它的结果(只有当它是一个查询,而不是一个动作)。
当您按“自我”排序时,您将看到占用大部分时间的实际呼叫。这些是你想要微调的功能。在大多数PHP脚本中,您会发现mysql_query支配此字段。如果你有很多调用,再次尝试减少它们或缓存。如果你有很少的调用,那么你可能需要优化sql-query。 PHP调试器不能帮助你。相反,找到实际的查询,并在mysql控制台上运行一个解释。这本身就是一整章。