这一节我还是重点说自己的想法吧,接下来在core文件夹的其他类就是为了完成各自的任务了,说实话,只要知识点没有漏洞,我们自己也可以完成它们的.但是这些究竟是什么呢?
Benchmark类,它是一个基准测试类,其目的也很简单,就是做两件事,第一件事就是保留一个时间使用的数组,然后可以查看任意两点的时间差,说的具体点就是计算某个过程的执行时间,第二个就是计算内存使用量.其实我们可以根据自己的需要进行扩充的,比如调用函数多少次,比如连接数据库多少次,这些常见的功能的扩展还是可以考虑的.它的实现还是蛮简单的,它就是负责记录时间,但是它没有特定的对象,就是它可以负责任何一个模块的事件记录,这恐怕就是aop的体现了.
这里它主要负责如下功能:
1.记录时间以及计算时间差.这一点非常简单,我们只需要使用一个函数microtime()即可截取当时的时间,它返回的时间比较精细可以精确到微秒.
2.记录内存使用,但是它只是返回一个标记,具体的调用由output类来负责,而output类来实现该功能也很简单.
-
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
-
-
class CI_Benchmark {
-
-
var $marker = array();
-
-
-
//设置一个基准测试标记
-
//多次调用这个函数可以记录多个可执行点的时间
-
//返回值为空,参数为字符串.
-
function mark($name)
-
{
-
$this->marker[$name] = microtime();
-
}
-
-
-
/**
-
统计两次测试的时间差.如果第一个参数为空,这个函数就返回 the
-
{elapsed_time} pseudo-variable,它允许整个系统执行的时间展示在模板上,
-
输出类会用真实的值来替换它的.
-
返回值为混合类型,前两个参数均为字符串,第三个参数为整型.
-
*/
-
function elapsed_time($point1 = '', $point2 = '', $decimals = 4)
-
{
-
//如果第一个参数为空,则交给output类去处理,此处只是返回一个记号.
-
if ($point1 == '')
-
{
-
return '{elapsed_time}';
-
}
-
//如果找不到第一个参数对应的值,则直接返回空字符串.
-
if ( ! isset($this->marker[$point1]))
-
{
-
return '';
-
}
-
//如果找不到第二个参数对应的值,则取当前时间.
-
if ( ! isset($this->marker[$point2]))
-
{
-
$this->marker[$point2] = microtime();
-
}
-
-
list($sm, $ss) = explode(' ', $this->marker[$point1]);
-
list($em, $es) = explode(' ', $this->marker[$point2]);
-
-
return number_format(($em + $es) - ($sm + $ss), $decimals);
-
}
-
-
-
/**
-
内存的使用情况.
-
该函数只负责返回一个{memory_usage}字符串,output类会替换它的.
-
*/
-
function memory_usage()
-
{
-
return '{memory_usage}';
-
}
-
-
}
阅读(759) | 评论(0) | 转发(0) |