PHP 성능 최적화 도구 편 Benchmark 클래스 디 버 깅 실행 시간

6864 단어 Benchmark
이것 은 PHP 성능 최적화 시리즈 2 기 입 니 다.PEAR 도구 류 Benchmark 를 사용 하여 코드 나 함수 의 실행 시간 을 한 줄 씩 가 져 오 는 방법 입 니 다.일 을 잘 하려 면 반드시 먼저 그 그릇 을 이 롭 게 해 야 한다!PEAR 과 Benchmark 를 어떻게 설치 하 는 지 는 PHP 성능 최적화 시리즈 1 기[PHP 성능 최적화 준비 편 도해 PEAR 설치]Benchmark 공구 류 패 키 지 를 참고 하여 직접 다운로드 하 십시오.http://pear.php.net/package/Benchmark/downloadBenchmark 공구 류 패 키 지 는 모두 세 개의 파일 이 있 는데 그것 이 바로 Timer.php,Iterate.php 와 Profiler.php 입 니 다.세 개의 공구 류 기능 이 같 지만 중점 이 다 릅 니 다.디 버 깅 코드 로 프로그램의 실행 시간 을 가 져 옵 니 다.1,Benchmark_Timer 류 원 리 는 microtime 함 수 를 통 해 초 단위 의 시간 을 얻 고 앞 뒤 두 시간 값 의 차 이 를 비교 하 는 것 과 같다.2,Benchmark_Iterate 클래스 는 디 버 깅 함수 의 평균 실행 시간 에 사 용 됩 니 다.3,Benchmark_Profiler 클래스 는 코드 와 함수 의 실행 시간 과 함수 의 호출 횟수 를 통계 하 는 데 사 용 됩 니 다.구체 적 인 사용 방법 은 세 파일 안에 상세 한 사용 실례 가 있다.어떻게 한 줄 또는 한 단락 코드 의 실행 시간 1 을 가 져 옵 니까?보통 microtime 함수 로 코드 를 가 져 오 는 전후의 초 시간 수 를 두 값 의 시간 차 를 비교 합 니 다.다음 과 같 습 니 다.

그러나 이런 방법 은 매우 제한 이 있어 서 광범 위 하 게 응용 할 수 없고 매번 많은 코드 를 써 야 하기 때문에 간단 한 디 버 깅 에 적합 하 다.구체 적 으로 는 PHP 매 뉴 얼 을 살 펴 보고 자세히 설명해 주세요.2,benchmark 사용 을 통 해Timer 클래스 가 코드 를 가 져 오 는 전후 에 실 행 된 시간 차 는 N 줄 코드 의 실행 시간 을 동시에 가 져 올 수 있 습 니 다.조작 이 간단 합 니 다.marker 표 시 를 하나만 추가 하면 됩 니 다.아래 Benchmark 를 보십시오.Timer 류 의 사용 설명 Benchmark타이머 류 BenchmarkTimer 클래스 는 디 버 깅 파일 에 Benchmark 만 추가 하면 됩 니 다.Timer 클래스 초기 화 성명 과 marker 레이 블,파일 끝 에 각 레이 블 의 실행 시간 을 인쇄 합 니 다.인 스 턴 스 는 다음 과 같 습 니 다.
require_once 'Benchmark/Timer.php';$timer = new Benchmark_Timer();$timer->start();$timer->setMarker("marker 01");usleep(1);$timer->setMarker("marker 02");usleep(2);$timer->setMarker("marker 03");usleep(3);$timer->stop();$timer->display();
인쇄 결 과 는 두 가지 방법 이 있 습 니 다.하 나 는 표 출력 방식 입 니 다.$timer->display();다음 그림php-performance-benchmark-timer다른 하 나 는 수 동 vardump 또는 printr,$timer->getProfiling();,print_r 함수 아래 그림 인쇄
array0 =>array'name' => string 'Start' (length=5)'time' => string '1265942405.31334800' (length=19)'diff' => string '-' (length=1)'total' => string '-' (length=1)1 =>array'name' => string 'marker 01' (length=9)'time' => string '1265942405.31374400' (length=19)'diff' => string '0.000396' (length=8)'total' => string '0.000396' (length=8)2 =>array'name' => string 'marker 02' (length=9)'time' => string '1265942405.31423000' (length=19)'diff' => string '0.000486' (length=8)'total' => string '0.000882' (length=8)3 =>array'name' => string 'marker 03' (length=9)'time' => string '1265942405.31519200' (length=19)'diff' => string '0.000962' (length=8)'total' => string '0.001844' (length=8)4 =>array'name' => string 'Stop' (length=4)'time' => string '1265942405.31623800' (length=19)'diff' => string '0.001046' (length=8)'total' => string '0.002890' (length=8)
결과 설명 1,name 은 레이 블 이름 을 표시 합 니 다.예 를 들 어 두 개의 특수 레이 블 start 와 stop 은 시작 과 끝 을 표시 합 니 다.그 다음은 사용자 정의 레이 블 marker 01 marker 02 등 2 입 니 다.time 은 현재 의 초 시간 3 을 표시 합 니 다.diff 는 이전 레이 블 이 현재 표 시 된 실행 시간 을 표시 합 니 다.이것 이 바로 우리 가 가 져 야 할 시간 차 입 니 다.맞습니다.바로 이 값 을 보 았 습 니 다.4,totalk 는 현재 전체 시간 동안 Benchmark 를 어떻게 사용 하 는 지 표시 합 니 다.Iterate 류 BenchmarkIterate 클래스 는 디 버 깅 함수 가 실 행 된 평균 시간 과 BenchmarkTimer 클래스 는 같은 함 수 를 여러 번 호출 하여 실행 시간의 평균 값 을 얻 을 수 있 습 니 다.인 스 턴 스 는 다음 과 같 습 니 다.
require_once "Benchmark/Iterate.php";$bench = new Benchmark_Iterate;function test($i){    echo $i;}$bench->run(100,"test",10);var_dump($bench->get());
테스트 함수 100 회 호출 을 통 해 평균 실행 시간 을 얻 었 습 니 다.결 과 는 다음 과 같 습 니 다.
array 1=>string'0.000486'(length=8)2=>string'0.000466'(length=8)............(중간 생략)99=>string'0.000479'(length=8)100=>string'0.000467'(length=8)'mean'=>string'0.000476'(length=8)'iterations'=>int 100
결 과 는 1.각 숫자 는 매번 호출 되 는 시간 2 를 나타 내 고 mean 은 함수 가 실 행 된 평균 시간 을 나타 낸다.예 를 들 어 100 회 test 함 수 를 호출 하 는 평균 시간 은 0.0004763 이 고 iterations 는 함수 호출 횟수 가 Benchmark 를 어떻게 사용 하 는 지 나타 낸다.Profiler 류 BenchmarkProfiler 클래스 는 함수 의 실행 횟수 와 실행 시간 등 을 통계 하 는 데 사 용 됩 니 다.인 스 턴 스 는 다음 과 같 습 니 다.
require_once 'Benchmark/Profiler.php';$profiler = new Benchmark_Profiler(TRUE);function myFunction() {    global $profiler;     $profiler->enterSection('myFunction');     //do something     $profiler->leaveSection('myFunction');     return;}//do somethingmyFunction();//do more
결 과 는 다음 과 같다.
php-performance-benchmark-profiler
Benchmark_Profiler 류 는 실제 성능 디 버 깅 에서 많이 사용 되 지 않 습 니 다.이것 보다 더 좋 은 도구 가 있 기 때문에 xDebuger 등 이 있 기 때문에 무시 할 수 있 습 니 다!Benchmark 도구 류 는 디 버 깅 을 사용 할 때 한 줄 한 줄 디 버 깅 을 통 해 프로그램의 성능 문 제 를 분석 하 는 데 매우 실 용적 이 며 주로 Benchmark 를 사용한다.Timer 류 디 버 깅 각 코드 세그먼트 의 시간 점 은 실행 시간 을 가 져 와 프로그램 을 최적화 시 켜 코드 의 성능 을 향상 시킨다.여기 서 더 이상 깊이 토론 하지 않 겠 습 니 다.만약 사용 하 는 과정 에서 어떤 문제 가 있 으 면 모두 가 함께 교류 하 는 것 을 환영 합 니 다!이러한 디 버 깅 이 매우 힘 들 고 힘 들 다 는 것 을 알 게 된다 면 프로그램의 성능 상황 을 전체적으로 파악 하고 싶다 면 이 Benchmark 류 디 버 깅 도 구 는 당신 의 수 요 를 만족 시 키 지 못 할 것 입 니 다.다음 기 에는 PHP 성능 디 버 깅 도구 xdbuger 의 설치 와 사용 에 대해 토론 할 것 입 니 다.관련 자료 microtime(PHP 3,PHP 4,PHP 5)microtime--현재 유 닉 스 타임 스탬프 와 초 단위 설명 mixed microtime([bool getas_float])microtime()현재 유 닉 스 타임 스탬프 와 초 단위 입 니 다.이 함 수 는 gettimeofday()시스템 호출 을 지원 하 는 운영 체제 에서 만 사용 할 수 있 습 니 다.호출 할 때 선택 할 수 있 는 인자 가 없 으 면 이 함 수 는"msec sec"형식 으로 문자열 을 되 돌려 줍 니 다.그 중에서 sec 는 유 닉 스 기원(0:00:00 January 1,1970 GMT)부터 현재 초 입 니 다.msec 는 초 입 니 다.문자열 의 두 부분 은 모두 초 단위 로 되 돌아 갑 니 다.하면,만약,만약...as_float 매개 변수 와 그 값 은 TRUE 와 같 으 며,microtime()은 부동 소수점 을 되 돌려 줍 니 다.주의:getas_float 인 자 는 PHP 5.0.0 에 새로 추 가 된 것 입 니 다.확장 자료PHP Benchmark/Timer ClassPHP BenchmarkBenchmark and Optimize PHP Script Speed

좋은 웹페이지 즐겨찾기