枫林在线精华区>>程序设计>>PHP
[33888] 主题: 如何计算页面运行时间
作者: leaflet (Leaf闭关中…)
标题: 如何计算页面运行时间
来自: 61.165.*.*
发贴时间: 2002年12月21日 17:30:13 (UTC +08:00)
长度: 4579字
这是一个我在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

========== * * * * * ==========
上级目录
Copyright © 2001-2025 枫林在线(www.FengLin.info)
All Rights Reserved