枫林在线论坛精华区>>程序设计
[33888] 主题: 如何计算页面运行时间
作者: leaflet (Leaf闭关中…)
标题: 如何计算页面运行时间
来自: 61.165.*.*
发贴时间: 2002年12月21日 17:30:13
长度: 4583字
这是一个我在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页面运行是相互之间是不会干扰的,所以开始运行时取microti
me(),结束时再取,相减就是运行时间。
  
 
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脚本访问数据库时延时而暂停或者不运行其它P
HP脚本吗?那样不就编程单线程了吗?

  
 
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:0
0  得分: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&quo
t;; 
        } 
    }  // 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 

========== * * * * * ==========
返回