我们如何知道脚本的执行时间? OOP

时间:2011-09-05 08:13:19

标签: php oop

我很想知道这个脚本是否适合知道php脚本的执行情况?

for miliseconds

<?php
$timestart = microtime(true);
/* Blah Blah here ... */
$timeend = microtime(true);
echo 'Execution Time : '.round((timeend - timestart) * 1000, 2);
?>

我对使用OOP(面向对象编程)没有任何想法。

另外我会制作一个解析文本文件(.txt)的脚本,我可能会有120到700行,哪种方式更好地了解数据处理?

时间是否取决于行数?

2 个答案:

答案 0 :(得分:3)

我使用前一段时间写的这个Timer类。一个优点是它是“增量的”你可以在一个循环中启动一个里面的,它会在开始和结束之间追加时间。

请注意,如果你这样做,它将有相当长的时间来执行。 基本用法:

$myTimer = new Timer();
$myTimer->start('hello');  // $myTimer = new Timer('hello'); is a shorthand for this.
for ($i=0; $i<100000; $i++)
{
  $myTimer->start('slow suspect 1');
  // stuff
  $myTimer->stop('slow suspect 1');    

  $myTimer->start('slow suspect 2');
  // moar stuff
  $myTimer->stop('slow suspect 2');    
}
$myTimer->stop('hello');
$myTimer->print_all();

请注意它是有限的,并不是最快的方法。创建和令人厌恶的类需要时间。在“逻辑”循环内部完成时,它可以添加相当长的时间。但要跟踪一些具有多个复杂循环或递归函数调用的复杂程序,这些东西很珍贵

<?php
class Timer_
{
    public $start;
    public $stop;
    public function __construct()
    {
        $this->start = microtime(true);
    }
}

class Timer
{
    private $timers = array();

    public function __construct($firsTimer=null)
    {
        if ( $firsTimer != null) $this->timers[$firsTimer][] = new Timer_();
    }

    public function start($name)
    {
        $this->timers[$name][] = new Timer_();  
    }

    public function stop($name)
    {
        $pos = count($this->timers[$name]) -1 ; 
        $this->timers[$name][$pos]->stop = microtime(true); 
    }

    public function print_all($html=true)
    {
        if ( $html ) echo '<pre>';

        foreach ($this->timers as $name => $timerArray)
        {
            $this->print_($name, $html);
        }

        if ( $html ) echo '</pre>';
    }

    public function print_($name, $html=true)
    {
        $nl = ( $html ) ? '<br>' : NEWLINE;
        $timerTotal = 0; 
        foreach ($this->timers[$name] as $key => $timer)
        {
            if ( $timer->stop != null )
            {
                $timerTotal += $timer->stop - $timer->start;
            }
        }
        echo $name, ': ', $timerTotal, $nl;

    }
}   
?>

答案 1 :(得分:1)

如果你想以OO的方式做,你可以在哪里开课。

$timer->start('piece1');
//code1
$timer->stop('piece1');
echo 'Script piece1 took '.$timer->get('piece1').' ms';

我相信它是在codeigniter框架中完成的。

这些名称('piece1')的意思是你可以同时运行多个计时器(另一个是一个例子)。实现的代码非常简单,大约10行。