Этот инструмент позволяет отслеживать производительность и обнаруживать утечки памяти, а также нестабильное поведение производительности вашего приложения с течением времени.
Для базового профилирования вы можете использовать помощник по профилированию. 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 , который предоставляет либо Profiler
, либо NullProfiler
.
namespace PetrKnap Profiler ;
echo doSomething ( new Profiler ());
echo doSomething ( new NullProfiler ());
Если вам нужно измерить текущие значения , просто вызовите метод takeSnapshot
в Profiling
или профилировщике.
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
.