이 도구를 사용하면 성능을 모니터링하고 메모리 누수는 물론 시간이 지남에 따라 애플리케이션의 일관되지 않은 성능 동작을 감지할 수 있습니다.
기본 프로파일링의 경우 프로파일링 도우미를 사용할 수 있습니다. Profiling
하면 start
메소드 호출과 finish
메소드 호출 사이를 프로파일링할 수 있습니다.
namespace PetrKnap Profiler ;
$ profiling = Profiling:: start ();
// do something
$ profile = $ profiling -> finish ();
printf ( ' It took %.1f s to do something. ' , $ profile -> getDuration ());
Profiling
간단하며 쉽게 켜고 끌 수 없습니다 . 그래서 하드코딩된 보다 복잡한 프로파일링을 목적으로 프로파일러가 만들어졌습니다.
프로파일러를 종속성으로 요청하고 이에 대한 profile
메서드를 호출합니다.
namespace PetrKnap Profiler ;
function doSomething ( ProfilerInterface $ profiler ): string {
return $ profiler -> profile ( function (): string {
return ' something ' ;
})-> process ( fn ( ProfileInterface $ profile ) => printf (
' It took %.1f s to do something. ' ,
$ profile -> getDuration (),
));
}
Profiler
또는 NullProfiler
를 제공하는 DI를 통해 쉽게 활성화하거나 비활성화할 수 있습니다.
namespace PetrKnap Profiler ;
echo doSomething ( new Profiler ());
echo doSomething ( new NullProfiler ());
현재 값을 측정 해야 하는 경우 Profiling
또는 프로파일러에서 takeSnapshot
메서드를 호출하면 됩니다.
namespace PetrKnap Profiler ;
$ profiling = Profiling:: start ();
// do something
$ profiling -> takeSnapshot ();
// do something more
$ profile = $ profiling -> finish ();
printf ( ' There are %d memory usage records. ' , count ( $ profile -> getMemoryUsages ()));
자동화하고 싶다면 틱 시 스냅샷을 찍으세요. 또는 보다 실용적인 계단식 프로파일링을 사용할 수 있습니다.
정확성을 높이기 위해 N
틱마다 스냅샷을 찍을 수 있습니다.
declare (ticks= 2 ); // this declaration is important (N=2)
namespace PetrKnap Profiler ;
$ profiling = Profiling:: start (takeSnapshotOnTick: true );
( fn () => ' something ' )();
$ profile = $ profiling -> finish ();
printf ( ' There are %d memory usage records. ' , count ( $ profile -> getMemoryUsages ()));
이로 인해 매우 상세한 코드 추적이 발생하여 모니터링되는 애플리케이션의 성능이 저하될 수 있습니다.
profile
방법은 보다 자세한 계단식 프로파일링에 사용할 수 있는 중첩 프로파일러를 제공합니다.
namespace PetrKnap Profiler ;
$ profile = ( new Profiler ())-> profile ( function ( ProfilerInterface $ profiler ): void {
// do something
$ profiler -> profile ( function (): void {
// do something more
});
});
printf ( ' There are %d memory usage records. ' , count ( $ profile -> getMemoryUsages ()));
composer require petrknap/profiler
. 기부를 통해 이 프로젝트를 지원할 수 있습니다. 이 프로젝트는 LGPL-3.0-or-later
조건에 따라 라이센스가 부여됩니다.