MENU

php显示页面执行时间的正确方法

July 3, 2013 • 程序阅读设置

昨天对VA China的两套皮肤都做出了一点儿修改,首先是更正了一些肤浅的错误的php语法,接着是删去了页面执行时间显示。之前放的页面执行时间显示确实有值,但是Hans说由于使用了框架的缘故,而时间计算位于View层,所以在框架入口处放置的microtime其实是不能作为模版变量赋值的。(灵异的是不知道看似正常的值是怎么来的)昨天事情比较多,来不及细看,就干脆删掉了。今天找个时间,仔细研究一下。

首先要明白的是,做显示页面执行时间这件事必不可少的函数是microtime。查询w3school的说明,得到的定义是:

microtime 函数返回当前 Unix 时间戳和微秒数。如果调用时不带可选参数,本函数以 "msec sec"的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec是微秒部分。字符串的两部分都是以秒为单位返回的。

尝试echo microtime();一下,输出的结果是0.97020200 1372816978这样的字符串。如何带入运算呢?当然是要把毫秒和秒两部分分开。于是尝试编写了如下验证程序:

<?php
$start = microtime();
$i = 0;
while($i < 999999) {
    $i++;
}
$end = explode(' ', microtime());
$start = explode(' ', $start);
$time = round($end[0] - $start[0] + $end[1] - $start[1], 6);
echo 'Processed in ', $time, ' Second(s).';

测试一下,嗯,正常了,那么就展开整合的动作咯。首先解决模版赋值的问题。首先这样的操作是直接放在页脚进行的,而对模版变量进行赋值是Controller层的事情。我们不可能对控制器的每一个方法都加定义,那么就要想其他办法。于是乎这么个傻瓜方法就出来了:

$real_start = explode(' ', microtime());
define('STAT_START_MS', $real_start[0]);
define('STAT_START_S', $real_start[1]);

接着在页脚加上这些:

$real_end = explode(' ', microtime());
$tused = round($real_end[0] - STAT_START_MS + $real_end[1] - STAT_START_S, 6);

这就完成了。在需要显示时间的合适位置echo $tused;即可。

Archives Tip
QR Code for this page
Tipping QR Code