2011-09-05 3 views
2

나는이 스크립트가 PHP 스크립트의 실행을 아는 것이 좋은지 알고 싶다? 밀리 초 스크립트의 실행 시간을 어떻게 알 수 있습니까? OOP

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

나는 그것으로 OOP (객체 지향 프로그래밍)를 사용하는 방법에 대한 아무 생각이 없다

에 대한

.

또한 텍스트 파일 (.txt)을 구문 분석 할 스크립트를 만들겠습니다. 데이터 처리를 아는 것이 더 좋은 방법은 120 - 700 줄입니다.

시간은 줄 수에 따라 다릅니 까?

+3

당신은 내가 일반적으로 할 무엇 무엇 –

+0

을 변경하지 않고 "여기 저쩌구"블록 내에서 OOP를 사용할 수 있습니다 소중합니다 더 큰 프로젝트의 경우 정확한 시간을 원한다면 그렇다면 $ timestart가 조기에 호출되고 작은 PHP 파일에 있는지 확인하는 것이 중요합니다. PHP 파일을 포함하여 속도가 느릴 수도 있기 때문입니다. 또한 PHP 5.3을 사용하는 경우 (또는 일부 최신 버전), 페이지 요청 타임 스탬프가 마이크로 시간 "형식"으로 변경되었습니다. 더 정확하고 $ timestart가 필요하지 않습니다. – Andreas

+0

감사합니다. 그것을 사용하는 것이 정말 재미있는가요? 또는 스크립트가 얼마나 실행되는지를 하루 만 분석하고자 할 때만 가능합니다. – Zeroth

답변

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; 

    } 
} 
?> 
+0

감사합니다! 및 각 페이지의 타이밍은 어떻게됩니까?

ms에 렌더링 된 페이지입니다.

좋은가 아니면 더 좋은 것을 찾을 수 있습니까? – Zeroth

1

OO 방식으로하고 싶다면 시작하는 곳에서 수업을 가질 수 있습니다.

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

나는 codeigniter 프레임 워크에서 그렇게 생각합니다.

이러한 이름 ('piece1')의 포인트는 여러 타이머를 동시에 실행할 수 있다는 것입니다 (예 : 다른 타이머). implementihg에 대한 코드는 약 10 행으로 매우 간단합니다.

+0

고맙습니다. 또한 텍스트 파일 (.txt)을 구문 분석 할 스크립트를 만들 겠지만 데이터 처리를 아는 것이 더 좋은 방법 인 120 ~ 700 줄을 사용하게 될 것입니까? – Zeroth

관련 문제