这是一个我在CSDN提的问题,以下是一些网友的回答。
主 题: 如何计算页面运行时间
作 者: leafok (Leaflet)
等 级:
信 誉 值: 100
所属论坛: Web 开发 PHP
问题点数: 50
回复次数: 13
发表时间: 2002-12-05 11:49:27
在PHP页面中如何计算其自身的运行时间呢?
如果使用microtime()获取页面开始和结束时的时间并相减的话,计算结果是页面运行
所经历的一段时间,但这并不一定是该页面自身运行的时间。因为可能存在多个PHP脚
本页面共同执行的情况,所以我觉得那个方法是不准确的。
而在ASP页面里则可以使用clock()函数获得所要的结果。那么在PHP里究竟如何才能获
得类似的结果呢?
请高手指点,谢谢!
没有人知道吗?
回复人: LostinDark(Lost_in_Dark) ( ) 信誉:100 2002-12-05 16:30:00 得分:0
多个PHP页面运行是相互之间是不会干扰的,所以开始运行时取microtime(),结束时再取
,相减就是运行时间。
Top
回复人: cnnps(诸葛晓光) ( ) 信誉:95 2002-12-05 18:18:00 得分:0
看看cwsd.51.net
Top
回复人: tntxhy(落日使者) ( ) 信誉:100 2002-12-05 18:25:00 得分:0
同意LostinDark(Lost_in_Dark),大多数的PHP程序也是这么计算脚本执行时间的。
Top
回复人: leafok(Leaflet) ( ) 信誉:100 2002-12-05 21:12:00 得分:0
我的意思是microtime()获取的是系统当前时间,两次相减的时间差未必就是页面自身独
自运行所占有的CPU时间。
尤其是当PHP页面进行一些耗时的处理(如访问数据库)时,时间占用还是比较大的。
由于服务器处理脚本时是多线程的,即可以同时运行多个脚本。各个脚本自然是轮流地被分
配到CPU时间片,那么计算单个PHP脚本的运行时间采用以上方式就不那么准确了。
难道服务器会因为一个PHP脚本访问数据库时延时而暂停或者不运行其它PHP脚本吗?那样不
就编程单线程了吗?
Top
回复人: leafok(Leaflet) ( ) 信誉:100 2002-12-05 21:18:00 得分:0
如果如楼上所说的那样,使用microtime()来计算页面运行时间的话,我遇到的以下问题
就难以解释了。
同样一个PHP页面(访问数据库的),在本机调试和在服务器上运行时,本机使用的时间(
通过microtime计算)明显短于服务器。我对此情况的解释是因为服务器是虚拟主机,许多
脚本同时运行,且数据库比较忙,所以造成运行时间延长。但这并不是我的那个PHP脚本本
身的问题,所以显示比实际长的运行时间显然不正确。
另外,经过测试,还发现显示的时间和网络速度有关。当网络繁忙,导致页面显示速度较慢
时,显示的运行时间也会延长。
Top
回复人: chinaworker(网络混混) ( ) 信誉:100 2002-12-05 21:46:00 得分:0
服务的执行比较久也有可能是因为服务器的硬件问题呀!
硬盘转速慢
cpu执行速度慢
内存太小
用cgi模式运行
等等呀!
Top
回复人: leafok(Leaflet) ( ) 信誉:100 2002-12-06 09:36:00 得分:0
服务器的问题会导致运行速度慢,但我用的是ISP的虚拟主机啊,再怎么样都应该比我的
台式机好吧
而且如果在半夜网络空闲的时候测试,速度明显地快。这更说明是服务器繁忙造成页面运行
时间延长的结果啊
Top
回复人: gcs925(鸟倦飞而知还) ( ) 信誉:100 2002-12-06 10:41:00 得分:0
gz
Top
回复人: leafok(Leaflet) ( ) 信誉:100 2002-12-08 12:49:00 得分:0
没有人有更好的办法了吗?
Top
回复人: global_boy(大师) ( ) 信誉:101 2002-12-08 12:54:00 得分:0
<%
class timer {
var $StartTime = 0;
var $StopTime = 0;
var $TimeSpent = 0;
function start(){
$this->StartTime = microtime();
}
function stop(){
$this->StopTime = microtime();
}
function spent() {
if ($this->TimeSpent) {
return $this->TimeSpent;
} else {
$StartMicro = substr($this->StartTime,0,10);
$StartSecond = substr($this->StartTime,11,10);
$StopMicro = substr($this->StopTime,0,10);
$StopSecond = substr($this->StopTime,11,10);
$start = doubleval($StartMicro) + $StartSecond;
$stop = doubleval($StopMicro) + $StopSecond;
$this->TimeSpent = $stop - $start;
return substr($this->TimeSpent,0,8)."sec";
}
} // end function spent();
} //end class timer;
//这里是一个简单的例子:
$timer = new timer;
$timer->start();
$temp=0;
for($i=0;$i<1000;$i++) for($j=0;$j<$i;$j++) $temp ++;
$timer->stop();
echo "run $temp times,time ".$timer->spent();
%>
Top
回复人: tmj(革命者) ( ) 信誉:100 2002-12-09 16:42:00 得分:0
up
Top
回复人: leo_zhangfh(nobody) ( ) 信誉:100 2002-12-09 16:58:00 得分:0
gz
Top
回复人: leafok(Leaflet) ( ) 信誉:100 2002-12-15 23:03:00 得分:0
感谢楼上的意见,但好像并没有真正解决我提出的问题啊!
Top
|