このツールを使用すると、パフォーマンスを監視し、メモリ リークや、時間の経過に伴うアプリケーションの一貫性のないパフォーマンス動作を検出できます。
基本的なプロファイリングには、プロファイリング ヘルパーを使用できます。 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
の条件に基づいてライセンスされています。