2010-01-29 3 views
0

저는 유지 관리하는 응용 프로그램에서 몇 가지 광범위한 성능 조사를 수행하고 있으며 요청의 실행 시간을 추적 할 수있는 간단한 솔루션을 설정했지만 이것이 만족스럽게 정확할지를 확인하기위한 정보를 찾을 수 없습니다 .소멸자는 스크립트의 실행 종료를 표시하는 데 적합한 위치입니까?

이것은 좋은 정보를 얻은 것으로 보입니다. 결과적으로 일부 성능 문제가 이미 제거되었지만 기록 된 실행 시간의 정확성에 의문을 제기하는 혼란스러운 항목이 나타납니다.

각 호출 스크립트의 끝 부분에 명시 적 메소드 호출을 추가하여 실행 종료를 표시해야합니까, 아니면 충분히 좋은 소멸자를 사용하는 (다소 깔끔한) 접근 방식입니까?

요청 된 스크립트의 맨 위에있는 호출 코드 :

require_once('Class.php'); 

class Bench extends Class 
{ 
    protected $page_log = 'bench-pages.log'; 
    protected $page_time_end; 
    protected $page_time_start; 

    public function __construct() 
    { 
     $this->set_page_time_start(); 
    } 

    public function __destruct() 
    { 
     $this->set_page_time_end(); 
     $this->add_page_record(); 
    } 

    public function add_page_record() 
    { 
     $line = $this->page_time_end - $this->page_time_start.','. 
       base64_encode(serialize($_SERVER)).','. 
       base64_encode(serialize($_GET)).','. 
       base64_encode(serialize($_POST)).','. 
       base64_encode(serialize($_SESSION))."\n"; 

     $fh = fopen(APP_ROOT . '/' . $this->page_log, 'a'); 
     fwrite($fh, $line); 
    } 

    public function set_page_time_end() 
    { 
     $this->page_time_end = microtime(true); 
    } 

    public function set_page_time_start() 
    { 
     $this->page_time_start = microtime(true); 
    } 
} 

답변

1

당신이해야 할 것은 Xdebug을 사용할 수 있습니다 : 여기

if(file_exists('../../../bench')) 
{ 
    require('../../../includes/classes/Bench.php'); 
    $Bench = new Bench; 
} 

그리고는 (명확성을 위해 감소) 클래스 정의입니다. 한 번 설정하고 코드를 변경하지 않아도 얼마나 오래 걸릴지 전체를 파악할 수 있습니다.

+0

에릭에 대한 조사에 감사드립니다. 그러나 필자는 프로파일 전략 제안 (다른 곳에서는 충분히 다루어 짐)을 요구하지 않았습니다. 내 질문은 PHP가 제공되는 요청과 관련하여 객체를 언로드하는 타이밍에 관한 것입니다. (기록을 위해 이미 Xdebug를 사용합니다.) –

관련 문제