رفتن به محتوا

معرفی قابلیت Defer در Laravel 12.34.0؛ روشی جدید برای افزایش سرعت اپلیکیشن

اگر از Laravel برای توسعه پروژه‌های خود استفاده می‌کنید، نسخه Laravel 12.34.0 یک قابلیت کاربردی جدید را در اختیار شما قرار داده است. ویژگی defer که به کلاس HTTP Client Batch اضافه شده، به شما اجازه می‌دهد درخواست‌های HTTP را پس از ارسال پاسخ به کاربر اجرا کنید.

این قابلیت می‌تواند تأثیر قابل توجهی بر افزایش سرعت پاسخ‌دهی (Response Time)، بهبود تجربه کاربری (UX) و بهینه‌سازی مصرف منابع سرور داشته باشد.

قابلیت Defer در Laravel چیست؟

در بسیاری از پروژه‌ها لازم است پس از انجام یک عملیات، اطلاعاتی به سرویس‌های خارجی ارسال شود؛ برای مثال:

  • ارسال اعلان (Notification)
  • بروزرسانی موجودی انبار
  • ثبت لاگ در سرویس‌های مانیتورینگ
  • ارسال اطلاعات به CRM
  • فراخوانی Webhookها
  • هماهنگ‌سازی داده‌ها با سرویس‌های دیگر

در گذشته، اجرای این درخواست‌ها باعث می‌شد کاربر تا پایان تمام درخواست‌های HTTP منتظر بماند. اما با معرفی متد defer()، این درخواست‌ها بعد از ارسال Response به کاربر اجرا می‌شوند.

در نتیجه، کاربر پاسخ را سریع‌تر دریافت می‌کند و عملیات زمان‌بر در پس‌زمینه انجام می‌شود.

ویژگی Defer در Laravel 12.34.0
نمونه کد استفاده از ویژگی Defer در Laravel 12.34.0

مزایای استفاده از Defer در Laravel

1. افزایش سرعت پاسخ‌دهی به کاربر

مهم‌ترین مزیت defer این است که زمان اجرای درخواست‌های خارجی از زمان پاسخ‌دهی به کاربر جدا می‌شود.

در نتیجه:

  • صفحات سریع‌تر بارگذاری می‌شوند.
  • زمان انتظار کاربر کاهش پیدا می‌کند.
  • تجربه کاربری بهبود می‌یابد.

2. اجرای عملیات زمان‌بر بدون کاهش Performance

عملیاتی مانند:

  • ارسال ایمیل
  • بروزرسانی موجودی کالا
  • ارسال اطلاعات به APIهای خارجی
  • ثبت لاگ
  • ارسال Notification

دیگر باعث کند شدن درخواست اصلی نمی‌شوند و پس از ارسال پاسخ اجرا خواهند شد.

3. مدیریت بهتر منابع سرور

با کاهش مدت زمانی که درخواست اصلی درگیر عملیات جانبی است، منابع سرور به شکل بهینه‌تری مدیریت می‌شوند و در پروژه‌های پرترافیک، عملکرد کلی سیستم نیز بهبود پیدا می‌کند.

نمونه استفاده از Defer در Laravel

use Illuminate\Support\Facades\Http;

Http::batch(function ($batch) {
    $batch->defer(
        Http::post('https://example.com/api/notify', [
            // Data...
        ])
    );

    $batch->defer(
        Http::post('https://example.com/api/update-stock', [
            // Data...
        ])
    );
});

در این مثال، هر دو درخواست HTTP پس از ارسال پاسخ به کاربر اجرا خواهند شد؛ بنابراین کاربر منتظر پایان این درخواست‌ها نخواهد ماند.

چه زمانی از Defer استفاده کنیم؟

این قابلیت برای سناریوهایی مناسب است که نتیجه درخواست HTTP برای پاسخ فعلی کاربر ضروری نیست. برای مثال:

  • ارسال اعلان به سرویس‌های پیام‌رسان
  • فراخوانی Webhookها
  • ارسال داده به سرویس‌های Analytics
  • بروزرسانی سیستم‌های جانبی
  • ثبت گزارش در سرویس‌های Logging
  • همگام‌سازی اطلاعات با APIهای خارجی

اگر پاسخ API خارجی برای نمایش نتیجه به کاربر لازم باشد، استفاده از defer انتخاب مناسبی نخواهد بود.

جمع‌بندی

ویژگی defer در Laravel 12.34.0 یکی از قابلیت‌های کوچک اما بسیار کاربردی این نسخه است که می‌تواند بدون تغییرات پیچیده در معماری پروژه، سرعت پاسخ‌دهی اپلیکیشن را افزایش دهد.

اگر پروژه شما با APIهای خارجی، وب‌هوک‌ها یا سرویس‌های جانبی در ارتباط است، استفاده از این قابلیت می‌تواند باعث بهبود عملکرد، کاهش زمان انتظار کاربران و استفاده بهینه‌تر از منابع سرور شود.


شاید برای شما سوال باشد؟!

Defer در Laravel چه کاربردی دارد؟
قابلیت Defer در Laravel 12.34.0 به شما اجازه می‌دهد درخواست‌های HTTP به سرویس‌های خارجی را پس از ارسال پاسخ به کاربر اجرا کنید. این ویژگی باعث می‌شود کاربر سریع‌تر پاسخ را دریافت کند و عملیات زمان‌بر مانند ارسال اعلان، بروزرسانی موجودی، ثبت لاگ یا فراخوانی APIهای خارجی در پس‌زمینه انجام شوند. در نتیجه، زمان پاسخ‌دهی (Response Time) کاهش پیدا کرده و تجربه کاربری بهبود می‌یابد.
تفاوت Defer با Queue در Laravel چیست؟
اگرچه هر دو قابلیت برای اجرای عملیات غیرهمزمان (Asynchronous) استفاده می‌شوند، اما کاربردهای متفاوتی دارند.
Defer برای اجرای درخواست‌های HTTP پس از پایان درخواست فعلی طراحی شده است. این عملیات معمولاً بلافاصله بعد از ارسال Response اجرا می‌شود و به راه‌اندازی Queue Worker یا سیستم صف نیاز ندارد.
در مقابل، Queue یک سیستم کامل برای مدیریت پردازش‌های پس‌زمینه است. Jobها در صف قرار می‌گیرند و توسط Queue Worker اجرا می‌شوند. صف‌ها قابلیت‌هایی مانند اولویت‌بندی، زمان‌بندی، Retry خودکار، مدیریت خطا، تأخیر در اجرا (Delay) و پردازش حجم بالای عملیات را در اختیار شما قرار می‌دهند.
به طور خلاصه:
از Defer برای عملیات سبک و کوتاهی استفاده کنید که فقط باید پس از ارسال پاسخ اجرا شوند.
از Queue برای پردازش‌های سنگین، زمان‌بر یا حیاتی که نیاز به مدیریت، Retry و مقیاس‌پذیری دارند استفاده کنید.
چه زمانی نباید از Defer استفاده کنیم؟
استفاده از defer همیشه بهترین انتخاب نیست. در شرایط زیر بهتر است از آن استفاده نکنید:
زمانی که نتیجه درخواست HTTP برای تولید پاسخ کاربر ضروری است؛ برای مثال اگر باید ابتدا اطلاعات از یک API دریافت شود و سپس به کاربر نمایش داده شود.
زمانی که عملیات زمان اجرای طولانی یا مصرف منابع بالایی دارد. در این شرایط استفاده از Queue انتخاب مناسب‌تری است.
زمانی که نیاز به قابلیت‌هایی مانند Retry خودکار، مدیریت خطا، زمان‌بندی اجرا یا اولویت‌بندی پردازش‌ها دارید.
زمانی که اجرای عملیات باید حتی در صورت بسته شدن یا متوقف شدن فرآیند درخواست نیز تضمین شود. در چنین سناریوهایی Queue اطمینان بیشتری نسبت به Defer ارائه می‌دهد.
به طور کلی، Defer برای عملیات سبک و غیرحیاتی که تنها هدف آن‌ها کاهش زمان انتظار کاربر است مناسب است، اما برای پردازش‌های مهم و سنگین همچنان استفاده از Laravel Queue بهترین راهکار محسوب می‌شود.

منتشر شده در آموزش‌های من

نظر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *