枫林在线论坛精华区>>程序设计 |
[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 |
||
========== * * * * * ==========
|
返回 |