تسمح لك هذه الأداة بمراقبة الأداء واكتشاف تسرب الذاكرة بالإضافة إلى سلوك الأداء غير المتسق لتطبيقك مع مرور الوقت.
بالنسبة للتوصيف الأساسي، يمكنك استخدام مساعد التوصيف. سيسمح لك 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
.