php profiler
2.2.0
该工具允许您监控性能并检测内存泄漏以及应用程序随时间变化的不一致的性能行为。
对于基本分析,您可以使用分析助手。 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 (),
));
}
它可以通过 DI轻松启用或禁用,DI 提供Profiler
或NullProfiler
。
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
的条款获得许可。