我正在使用的网站开始变得有点迟钝,我想改进它。我认为问题出在PHP上,但我不能确定。如何查看函数执行的时间有多长?
答案 0 :(得分:17)
如果您想测试执行时间:
<?php
$startTime = microtime(true);
// Your content to test
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
echo "Execution time : $elapsed seconds";
?>
答案 1 :(得分:5)
在XDebug或Zend Debugger中尝试使用探查器功能?
答案 2 :(得分:1)
你可以做两件事。 将Microtime称为无处不在但如果您想测试多个功能则不方便。因此,如果您想测试我想要做的许多功能,有一种更简单的方法可以做到更好的解决方案。 只需要一个类(点击链接以跟随教程),你可以测试你的所有功能需要多长时间。而不是在任何地方放置microtime。你只需要使用这个课程。这很方便
http://codeaid.net/php/calculate-script-execution-time-%28php-class%29
您可以做的第二件事是通过查看内存使用情况来优化脚本。 通过观察脚本的内存使用情况,您可以更好地优化代码。
PHP有一个垃圾收集器和一个非常复杂的内存管理器。脚本使用的内存量。可以在执行脚本期间上下移动。为了获得当前的内存使用量,我们可以使用memory_get_usage()函数,并且为了获得在任何点使用的最大内存量,我们可以使用memory_get_peak_usage()函数。 查看plaincopy到clipboardprint?
echo "Initial: ".memory_get_usage()." bytes \n";
/* prints
Initial: 361400 bytes
*/
// let's use up some memory
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// let's remove half of the array
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo "Final: ".memory_get_usage()." bytes \n";
/* prints
Final: 885912 bytes
*/
echo "Peak: ".memory_get_peak_usage()." bytes \n";
/* prints
Peak: 13687072 bytes
*/
http://net.tutsplus.com/tutorials/php/9-useful-php-functions-and-features-you-need-to-know/
<强> PK 强>
答案 3 :(得分:0)
您也可以通过在不同位置记录microtime()值来手动创建,如下所示:
<?
$TIMER['start']=microtime(TRUE);
// some code
$query="SELECT ...";
$TIMER['before q']=microtime(TRUE);
$res=mysql_query($query);
$TIMER['after q']=microtime(TRUE);
while ($row = mysql_fetch_array($res)) {
// some code
}
$TIMER['array filled']=microtime(TRUE);
// some code
$TIMER['pagination']=microtime(TRUE);
/and so on
?>
然后将其可视化
<?
if ('127.0.0.1' === $_SERVER['REMOTE_ADDR']) {
echo "<table border=1><tr><td>name</td><td>so far</td><td>delta</td><td>per cent</td></tr>";
reset($TIMER);
$start=$prev=current($TIMER);
$total=end($TIMER)-$start;
foreach($TIMER as $name => $value) {
$sofar=round($value-$start,3);
$delta=round($value-$prev,3);
$percent=round($delta/$total*100);
echo "<tr><td>$name</td><td>$sofar</td><td>$delta</td><td>$percent</td></tr>";
$prev=$value;
}
echo "</table>";
}
?>
IP地址检查意味着我们正在工作站点上进行此分析
虽然我怀疑这是PHP本身。很可能是它的数据库。所以,要特别注意查询执行时间。
然而,“网站”术语非常广泛。它还包括JS,CSS,图像和东西。因此,我建议从FirebFug的Net页面开始,看看整个页面的哪个部分需要更多时间。
当然,只有在分析分析结果后才能进行精炼,没有它就不能在这里建议。
答案 4 :(得分:0)
你最好的选择是Xdebug。我很开心因为它捆绑在我的PHPed IDE中。只需点击一下按钮,我就可以获得分析器数据。
所以也许你可以考虑一下。
答案 5 :(得分:0)
我有类似的问题,所以我在数据库上创建了2个新表和两个新函数。一个是audit_sql,另一个是audit_code。因为我使用了SQL抽象类,所以很容易为每个SQL调用计时(我使用了php microtime,正如其他人所建议的那样)。因此,我在SQL调用之前和之后调用了microtime,并将结果存储在数据库中。
与页面类似。我在每页的开头和结尾打电话给microtime,如有必要,在功能的开头和结尾,divs - 我认为可能是罪魁祸首。
一般结果是:
对MySQL的SQL调用几乎是即时的,根本不存在问题。我唯一要说的是,即使我对正在执行的号码感到惊讶!该站点是从数据库生成的 - 甚至是菜单,权限等。为了生成主页,SQL调用是在100秒内测量的。
PHP不是罪魁祸首。这比MySQL更加即时。
罪魁祸首是....(大建立!)给You Tube和Picassa以及其他类似的网站打电话。我在网站上托管视频和相册(好吧,我实际上并不存储它们 - 它们存储在YT上等),而在主页上是通过You Tube PHP API从You Tube等中提取的缩略图/ Zend框架。因为这是基于其他站点的所有http,每个站点需要1,2或3秒。这导致包含这些的div占用6到12秒,主页占用17秒。
解决方案 - 将所有缩略图存储在我的服务器上。第一次必须从远程站点(YT,Picassa等)提供服务,然后将其存储在您自己的站点上。将来,您将检查是否拥有它,如果是这样,请始终从您的服务器提供服务。将页面加载时间缩短至2-3秒。当有人加载了更多视频/图像后,第一个看到第一个主页加载的人需要一些时间,但此后却没有。人们会将长时间的一次性页面加载时间放到他们的连接/一般的互联网上。您站点的负载太慢,他们将停止访问!
我希望这有所帮助。