我很想知道这个脚本是否适合知道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行,哪种方式更好地了解数据处理?
时间是否取决于行数?
答案 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行。