Cet outil vous permet de surveiller les performances et de détecter les fuites de mémoire ainsi que le comportement incohérent des performances de votre application au fil du temps.
Pour le profilage de base, vous pouvez utiliser un assistant de profilage. Le Profiling
vous permettra d'établir un profil entre les appels de méthodes start
et finish
.
namespace PetrKnap Profiler ;
$ profiling = Profiling:: start ();
// do something
$ profile = $ profiling -> finish ();
printf ( ' It took %.1f s to do something. ' , $ profile -> getDuration ());
Le Profiling
est simple et ne peut pas être activé et désactivé facilement. Un profileur a donc été créé dans le but de créer un profilage plus complexe codé en dur.
Demandez un profileur en tant que dépendance et appelez une méthode profile
dessus.
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 (),
));
}
Il peut être facilement activé ou désactivé via le DI , qui fournit soit le Profiler
, soit le NullProfiler
.
namespace PetrKnap Profiler ;
echo doSomething ( new Profiler ());
echo doSomething ( new NullProfiler ());
Si vous avez besoin de mesurer les valeurs actuelles , appelez simplement la méthode takeSnapshot
sur le Profiling
ou un profileur.
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 ()));
Si vous souhaitez l'automatiser, prenez un instantané au moment du tick. Ou vous pouvez utiliser un profilage en cascade plus pratique.
Pour plus de précision, vous pouvez prendre un instantané à chaque N
tick .
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 ()));
Cela entraînera un suivi du code très détaillé , ce qui peut dégrader les performances de l'application surveillée.
La méthode profile
vous fournit un profileur imbriqué que vous pouvez utiliser pour un profilage en cascade plus détaillé.
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 ()));
Exécutez composer require petrknap/profiler
pour l’installer. Vous pouvez soutenir ce projet via un don. Le projet est sous licence selon les termes de la LGPL-3.0-or-later
.