لاراول ۱۳.۶: جابهای صفبندی با قابلیت Debounce
خلاصهٔ کاملتر
لاراول ۱۳.۶ با یه سری امکانات جدید و جالب منتشر شده که توسعهدهندههای PHP رو خوشحال میکنه. مهمترین چیزی که این نسخه آورده، سیستم Debounce برای جابهای صفبندیشدهست که یه مشکل رایج رو به شکل خیلی تمیزی حل میکنه.
فرض کن یه کاربر در عرض ۳۰ ثانیه ده بار یه سند رو ویرایش میکنه. بدون Debounce، ده بار جاب بازسازی ایندکس جستجو توی صف میره و ده بار اجرا میشه؛ منابع هدر میره و کار تکراری انجام میشه. با قابلیت جدید Debounce، فقط آخرین dispatch اجرا میشه و بقیه خودبهخود حذف میشن.
برای استفاده از این قابلیت کافیه attribute جدید DebounceFor رو روی جاب بذاری و مشخص کنی که چند ثانیه باید صبر کنه. همچنین میشه یه متد debounceId تعریف کرد تا مشخص بشه کدوم جابها با هم یکی حساب میشن. این کار رو میشه هم روی کلاس جاب انجام داد، هم موقع dispatch.
یه پارامتر جالب دیگه هم اضافه شده به اسم maxWait که مشخص میکنه یه جاب حداکثر چقدر میتونه به تعویق بیفته. مثلاً اگه Debounce رو روی ۳۰ ثانیه تنظیم کردی ولی maxWait رو روی ۱۲۰ ثانیه، حتی اگه دائماً dispatch بشه، بعد از ۱۲۰ ثانیه حتماً یه بار اجرا میشه.
تفاوت مهمی هم با ShouldBeUnique وجود داره که باید بدونی: در ShouldBeUnique، اگه یه جاب مشابه توی صف باشه، dispatch جدید رد میشه (اولی برندهست). ولی در Debounce، هر dispatch جدید، قبلی رو کنسل میکنه و آخرین dispatch برندهست. این دو رویکرد برای سناریوهای مختلف مناسبن.
یه ویژگی مفید دیگه اینه که مسیر health اپلیکیشن یعنی همون /up حالا میتونه JSON برگردونه. قبلاً این مسیر همیشه HTML رندر میکرد که برای اپهای API-only و load balancer هایی که JSON انتظار دارن، مشکلساز بود. حالا اگه درخواست JSON بخواد، یه پاسخ ساده JSON با وضعیت اپلیکیشن برمیگرده.
یه JsonFormatter جدید هم اضافه شده که برای سیستمهای جمعآوری لاگ مثل ELK Stack یا Datadog خیلی بهدرد میخوره. این formatter خروجی لاگ رو به صورت JSON ساختاریافته تولید میکنه که پردازش اون توی سیستمهای مانیتورینگ خیلی راحتتره.
لاراول حالا از سرویس ایمیل Cloudflare هم پشتیبانی میکنه. با تنظیم چند خط در فایل config، میشه ایمیلها رو از طریق زیرساخت Cloudflare ارسال کرد. در کنار اینها، متد hasAttached در factoryها حالا میتونه برای هر رکورد مقادیر pivot متفاوتی بپذیره، و assertionهای دیتابیس در تستها حالا آرایهای از رکوردها رو هم میپذیرن که نوشتن تست رو سریعتر میکنه.
نکات کلیدی:
- قابلیت Debounce برای جابهای صفبندی: فقط آخرین dispatch در بازه زمانی اجرا میشه
- attribute جدید DebounceFor با پشتیبانی از پارامتر maxWait برای سقف تأخیر
- تفاوت کلیدی با ShouldBeUnique: در Debounce آخرین dispatch برندهست، نه اولی
- مسیر /up حالا JSON برمیگردونه وقتی درخواست JSON باشه
- JsonFormatter جدید برای لاگگیری ساختاریافته و سازگار با ELK و Datadog
- پشتیبانی از سرویس ایمیل Cloudflare
- بهبود factory hasAttached برای pivot values متفاوت
- assertion های تست دیتابیس حالا چند رکورد رو یکجا چک میکنن




