Laravel Time Machine؛ پروفایلر چرخهٔ عمر ریکوئست
خلاصهٔ کاملتر
تو Laravel News معرفی شده که Laravel Time Machine، ساختهٔ Jaydeep Gadhiya، یه پروفایلر پرفورمنس برای لاراوله که تمام مراحل یه ریکوئست رو ثبت میکنه: بوتاسترپ فریمورک، میدلور، روتینگ، کنترلر، ریسپانس و مرحلهٔ terminate، همه با زمانبندی میلیثانیهای. به بیان مقاله، این پکیج فقط به یه سؤال جواب میده: وقت این درخواست کجا رفت؟
بعد از نصب، هر ریکوئست HTTP خودکار ثبت میشه و یه داشبورد مستقل روی مسیر /time-machine بالا میاد. برای هر درخواست یه تایملاین گانتمانند میبینی که نشون میده اپلیکیشن تو هر فاز چقدر وقت گذاشته، در کنار مصرف حافظه و تعداد کوئری. درخواستهایی که از آستانهٔ کندی رد بشن (پیشفرض ۵۰۰ میلیثانیه) تو لیست هایلایت میشن، و برای کوئریها این آستانه ۵۰ میلیثانیهست — هر دو هم قابل تنظیمن.
کالکتور کوئری، که با collectors.queries روشن و خاموش میشه، هر دستور SQL رو با بایندینگها، کانکشن و زمان اجرا نگه میداره. مسیرهای فایلهای استاتیک و چیزهایی مثل داشبورد Telescope هم با ignore_paths نادیده گرفته میشن. پیشفرض هم تابع APP_DEBUG هست، یعنی تو پروداکشن خاموش میمونه تا خودت روشنش کنی.
جدا از فازهای خودکار فریمورک، میتونی کد خودت رو هم با Facade مربوط به TimeMachine اندازه بگیری: مارکر نقطهای بذاری، یه بلاک کد رو داخل یه کلوزر اندازهگیریشده بپیچی، یا اسپن رو دستی با startSpan و endSpan کنترل کنی:
TimeMachine::mark('cache primed');
$report = TimeMachine::measure('generate-report', function () {
return Report::build();
});اسپنهای سفارشی روی همون تایملاین فازهای فریمورک ظاهر میشن، پس میبینی یه کال کند به API بیرونی یا ساخت یه گزارش، کجای کل ریکوئست نشسته.
پروفایلها بهصورت فایل JSON تو storage/time-machine نوشته میشن؛ نه مایگریشنی لازمه و نه داده از سرور خودت بیرون میره. پیشفرض ۱۰۰ پروفایل آخر نگه داشته میشه و قدیمیها هرس میشن، و این سقف با تنظیم storage.max_records یا متغیر TIME_MACHINE_MAX_RECORDS عوض میشه.
مقاله جای این پکیج رو نسبت به Telescope و Debugbar هم روشن میکنه: Telescope کل اپلیکیشن رو رصد میکنه (ریکوئست، جاب، ایمیل، نوتیفیکیشن، کش و بیشتر) و دادهش تو دیتابیسه؛ Debugbar یه تولبار داخل همون صفحه نشون میده. Time Machine وسط این دوتاست: تاریخچهٔ قابل مرور مثل Telescope، ولی فقط زمانبندی چرخهٔ عمر و کوئری، تو فایل ساده و روی تایملاین. به گفتهٔ نویسنده اگه مانیتورینگ کامل میخوای Telescope همچنان بهتره؛ اگه دنبال اینی که وقت هر ریکوئست کجا میره، این پکیج برای همین ساخته شده.
پکیج از لاراول ۸ تا ۱۳ پشتیبانی میکنه و با Composer نصب میشه؛ auto-discovery خودش سرویسپروایدر و Facade رو هندل میکنه و انتشار فایل کانفیگ اختیاریه.
نکات کلیدی:
- تایملاین گانتمانند از همهٔ فازهای ریکوئست، از بوت فریمورک تا terminate
- ثبت کوئریها با بایندینگ، کانکشن و زمان اجرا؛ آستانهٔ کندی ۵۰۰ms برای ریکوئست و ۵۰ms برای کوئری
- ذخیرهسازی فایلمحور تو storage/time-machine بدون جدول و مایگریشن، با نگهداری ۱۰۰ پروفایل آخر
- ابزار اندازهگیری دستی با mark، measure و startSpan/endSpan روی همون تایملاین
- پیشفرض تابع APP_DEBUG، پس تو پروداکشن خاموشه
- پشتیبانی از لاراول ۸ تا ۱۳




