벤치마크

CodeIgniter는 코드를 벤치마킹하고 다른 옵션인 타이머와 반복자(Iterator)를 테스트하는데 도움이 되는 두 가지 도구를 제공합니다. 타이머를 사용하면 스크립트 실행시 두 지점 사이의 시간을 쉽게 계산할 수 있습니다. Iterator를 사용하면 몇 가지 변형을 설정하고 해당 테스트를 실행하여 성능 및 메모리 통계를 기록하고 어떤 버전이 가장 적합한 지 결정할 수 있습니다.

Timer 클래스는 항상 활성화되어 있으며, 프레임워크가 호출되는 순간부터 시작되어 출력이 사용자에게 전송되기 직전까지 전체 시스템 실행의 정확한 타이밍을 확인 가능하게 합니다.

타이머 사용

타이머를 사용하면 애플리케이션 실행시 두 순간 사이의 시간을 측정할 수 있습니다. 따라서 애플리케이션의 다양한 성능을 간단하게 측정할 수 있습니다. 모든 측정은 start()stop() 메소드를 사용하여 수행됩니다.

start() 메소드는 타이머의 이름을 단일 매개 변수로 사용합니다. 타이머 이름은 모든 문자열을 사용할 수 있으며, 어떤 측정값이 어떤 것인지 알기 위해 참조용으로 사용됩니다

$benchmark = \Config\Services::timer();
$benchmark->start('render view');

stop() 메소드는 중지하려는 타이머의 이름을 유일한 매개 변수로 사용합니다.

$benchmark->stop('render view');

The name is not case-sensitive, but otherwise must match the name you gave it when you started the timer.

이름은 대소문자를 구분하지 않지만 타이머를 시작할 때 지정한 이름과 일치해야합니다.

전역 함수 timer()를 사용하여 타이머를 시작하고 중지할 수 있습니다

// Start the timer
timer('render view');
// Stop a running timer,
// if one of this name has been started
timer('render view');

벤치마킹 포인트 보기

애플리케이션이 실행될 때 설정한 모든 타이머는 Timer 클래스에 의해 수집됩니다. 그러나 자동으로 표시하지는 않습니다. getTimers() 메소드를 호출하여 모든 타이머를 검색할 수 있으며, 시작, 종료 및 지속 시간을 포함한 일련의 벤치 마크 정보를 리턴합니다.

$timers = $benchmark->getTimers();

// Timers =
[
        'render view'  => [
                'start'    => 1234567890,
                'end'      => 1345678920,
                'duration' => 15.4315      // number of seconds
        ]
]

유일한 매개 변수로 표시할 소수 자릿수를 전달하여 계산된 지속 시간의 정밀도를 변경할 수 있습니다. 기본값은 소수점 4자리입니다

$timers = $benchmark->getTimers(6);

타이머는 자동으로 디버그 툴바에 표시됩니다.

실행 시간 표시

getTimers() 메소드는 프로젝트의 모든 타이머에 대한 원시 데이터를 제공하지만 getElapsedTime() 메소드를 사용하여 단일 타이머의 지속 시간을 초 단위로 검색할 수 있습니다. 첫 번째 매개 변수는 표시 할 타이머의 이름입니다. 두 번째는 표시 할 소수 자릿수입니다.(기본값은 4)

echo timer()->getElapsedTime('render view');
// Displays: 0.0234

Iterator 사용

Iterator는 솔루션에서 여러 변형을 시도하여 속도 차이와 다른 메모리 사용 패턴을 볼 수 있도록 설계된 간단한 도구입니다. 실행할 수있는 “태스크”를 여러 개 추가할 수 있으며, 클래스는 수백 또는 수천 번 태스크를 실행하여 성능을 보다 명확하게 파악합니다. 그런 다음 스크립트에서 결과를 검색하여 사용하거나, HTML 테이블로 표시할 수 있습니다.

Creating Tasks To Run

작업은 클로저(Closures)내에 정의됩니다. 작업이 생성한 모든 출력은 자동으로 삭제됩니다. 그것들은 add() 메소드를 통해 Iterator 클래스에 추가됩니다. 첫 번째 매개 변수는 이 테스트를 참조하려는 이름입니다. 두 번째 매개 변수는 클로저입니다.

$iterator = new \CodeIgniter\Benchmark\Iterator();

// Add a new task
$iterator->add('single_concat', function()
        {
                $str = 'Some basic'.'little'.'string concatenation test.';
        }
);

// Add another task
$iterator->add('double', function($a='little')
        {
                $str = "Some basic {$little} string test.";
        }
);

작업 실행

실행할 작업을 추가한 후에는 run() 메서드를 사용하여 작업을 여러번 반복할 수 있습니다. 기본적으로 각 작업을 1000번 실행합니다. 이것은 대부분의 간단한 테스트에 충분합니다. 테스트를 그보다 더 많이 실행해야 하는 경우 숫자를 첫 번째 매개 변수로 전달합니다

// Run the tests 3000 times.
$iterator->run(3000);

실행되면 테스트 결과가 포함된 HTML 테이블이 반환됩니다. 결과를 표시하지 않으려면 두 번째 매개 변수에 false를 전달하면됩니다.

// Don't display the results.
$iterator->run(1000, false);