ChrisMao 发表于 2007-11-26 19:25:58

CodeIgniter类库之Benchmarking Class

CodeIgniter中有个Benchmarking类库,它是被系统自动被加载的,不需要手工加载。Benchmarking类库能够计算出任意两个被标记点之间的代码执行时间。通过这个数值,可以评估程序员编写的程序的效率。    另外,当CodeIgniter框架被调用时,系统会调用Benchmark类库中的方法,以计算出Output类库将所有内容正确的发送至浏览器所执行的时间。
    可以在我们自己编写的模型(Model)、视图(View)和控件器(Controller)中通过以下三步使用Benchmark:
[*]标记起始点[*]标记结束点[*]调用elapsed_time方法显示结果    下面就是使用示例
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif$this->benchmark->mark('code_start');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif// Some code happens here
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif$this->benchmark->mark('code_end');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifecho
$this->benchmark->elapsed_time('code_start',
'code_end');

    我们可以任意代码行做标记,并通过elapsed_time方法计算任两个标记点之间的代码执行时间。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif$this->benchmark->mark('dog');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif// Some code happens here
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif$this->benchmark->mark('cat');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif// More code happens here
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif$this->benchmark->mark('bird');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifecho
$this->benchmark->elapsed_time('dog',
'cat');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifecho
$this->benchmark->elapsed_time('cat',
'bird');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifecho
$this->benchmark->elapsed_time('dog',
'bird');

    若希望显示从框架被加载到所有内容被正确发送至浏览器中所消耗的时间,可以在你的视图文件(View)中加入如下语句,这个语句只能在视图文件(View)中使用。
<?php echo
$this->benchmark->elapsed_time();?>

    这句代码和我们在之前的示例中使用的是同一个方法,只不过是没有参数。如果你的视图是使用HTML和PHP混合编写的,你还可以通过使用模板标记来显示结果
{elapsed_time}

    我们还可以在自己编写的视图中使用另一个模板标记来显示内存的使用信息
{memory_usage}

PS:上面提到的{elapsed_time}和{memroy_usage}标记只能在视图文件(View)中使用。

Hex 发表于 2007-11-27 10:26:57

太棒了~~~~~~很棒的文章!加威望,加精!

gaochao 发表于 2007-11-27 11:53:45

在开发过程中如果仅仅想知道一个页面的运行时间,post数据,运行了哪些sql语句等
就在/system/libraries/Output.php中
找到var $enable_profiler这个值改成TRUE
记得正式版本中关掉就行了。

Hex 发表于 2007-11-27 12:21:18

在控制器里可以控制是不是输出这些内容,不用改 CI 的源代码。

gaochao 发表于 2007-11-27 23:19:11

呵呵 偶就是懒得在控制器里面写的嘛

Hex 发表于 2007-11-28 10:28:25

总改 CI 的源代码可不是好习惯哦~

gaochao 发表于 2007-11-28 17:01:21

有些源码是不太规范,比如form helper 输出的input都不带id的,不改不行啊

Hex 发表于 2007-11-28 17:54:13

你自己写辅助函数啊!
并且我觉得在视图里最好只使用 HTML 代码(当然必要的循环、分支除外),这样比较方便美工人员制作页面,这也符合 smarty 的做事方式,呵呵。

gaochao 发表于 2007-11-29 00:09:54

我命苦,我的美工只负责视觉设计,不负责html,我也懒得让他负责那个,做出来的table套table跟没做一样的

Hex 发表于 2007-11-29 10:20:09

呵呵,那就只好你自己弄了~~~
其实在 RoR 中,辅助方法是用在视图中的,所以在 CI 中这么用应该也会比较好。
页: [1] 2
查看完整版本: CodeIgniter类库之Benchmarking Class