Laravel Octane چیست و آیا برای همه پروژه‌ها مناسب است؟ — راهنمای جامع

سرعت همیشه یکی از دغدغه‌های اصلی در پروژه‌های وب بوده. وقتی پای لاراول وسط میاد، خیلی‌ها می‌پرسن: «آیا لاراول کند نیست؟» واقعیت اینه که مشکل از خود لاراول نیست، بلکه از مدل اجرای PHP-FPM میاد. برای حل این موضوع، تیم لاراول ابزاری معرفی کرد به اسم Laravel Octane. این ابزار با کمک سرورهای مدرنی مثل Swoole و RoadRunner، اپلیکیشن لاراولی رو چندین برابر سریع‌تر می‌کنه. توی این مقاله، از پایه تا تخصصی‌ترین نکات Octane رو بررسی می‌کنیم: از معرفی و نصب گرفته تا معماری و pitfalls.

Laravel Octane چیست؟

لاراول اکتان یه لایه‌ست که اپلیکیشن لاراول رو روی سرورهایی مثل Swoole یا RoadRunner اجرا می‌کنه. فرقش با PHP-FPM اینه که اپلیکیشن فقط یک بار بوت می‌شه و در حافظه می‌مونه. بعد از اون، همه درخواست‌ها روی همون اپ اجرا می‌شن. نتیجه؟ سرعت خیلی بیشتر و مصرف CPU کمتر.

مدل عادی (PHP-FPM)

  1. هر درخواست اپ رو از صفر بوت می‌کنه.
  2. autoload، service providerها، configها دوباره بارگذاری می‌شن.
  3. بعد از پاسخ، همه چیز نابود می‌شه.

مدل Octane

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

نصب و راه‌اندازی Octane

composer require laravel/octane

بعد از نصب، دستور زیر رو اجرا کن:

php artisan octane:install

حالا می‌تونی سرور رو با Swoole یا RoadRunner بالا بیاری:

php artisan octane:start --server=swoole

یا:

php artisan octane:start --server=roadrunner

مزایای اصلی Octane

  • سرعت بیشتر: بوت نشدن اپ در هر درخواست.
  • پشتیبانی از async و concurrency: مخصوصاً در Swoole.
  • پشتیبانی از وب‌سوکت‌ها: اپلیکیشن‌های real-time خیلی راحت‌تر ساخته می‌شن.
  • مصرف منابع کمتر: مخصوصاً روی سرورهای شلوغ.

مثال ساده: افزایش سرعت API

بدون Octane، یک endpoint ساده که دیتابیس رو query می‌کنه، ممکنه 200ms طول بکشه. با Octane، همون endpoint می‌تونه به 30-40ms کاهش پیدا کنه چون لاراول هر بار از صفر لود نمی‌شه.

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

Octane مخصوص پروژه‌هایی هست که:

  • ترافیک بالا دارن (فروشگاه‌های بزرگ، SaaS).
  • نیاز به real-time دارن (چت، مانیتورینگ).
  • نیاز به API سریع برای موبایل دارن.
  • کارهای سنگین دارن و بوت لاراول زمان‌بره.

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

Octane همه‌جا مناسب نیست. مواردی که شاید بی‌فایده باشه:

  • پروژه‌های کوچک یا وبسایت‌های ساده.
  • سرورهای اشتراکی (که اجازه نصب Swoole/roadrunner رو نمی‌دن).
  • وقتی تیم تجربه کافی نداره و ممکنه با state اشتراکی مشکل بخوره.

چالش‌ها و Pitfalls

چون اپ در حافظه می‌مونه، باید حواست باشه:

  • Stateful Objects: اگر داخل کلاس یک property تغییر کنه، ممکنه روی درخواست بعدی هم تأثیر بذاره.
  • Single Responsibility: کلاس‌ها رو تمیز بنویس. اکتان مشکلات کد بد رو آشکارتر می‌کنه.
  • Session & Cache: بهتره Redis یا دیتابیس استفاده کنی.

نمونه کد — async در Swoole

Swoole اجازه می‌ده درخواست‌های همزمان (concurrent) رو مدیریت کنی:


use Swoole\Coroutine;

Octane::concurrently([
    fn () => Http::get('https://api.service1.com/data'),
    fn () => Http::get('https://api.service2.com/data'),
]);
  

این کد دو درخواست HTTP رو همزمان می‌فرسته. در حالت عادی باید منتظر بمونی تا یکی تموم شه بعد دومی شروع بشه.

نمونه کاربرد: وب‌سوکت در Octane

با Swoole می‌تونی وب‌سوکت بسازی و یک سرور real-time داشته باشی:


// routes/octane.php
use Laravel\Octane\Facades\Octane;

Octane::route('GET', '/ws', function ($request, $ws) {
    $ws->send('اتصال برقرار شد!');
});
  

تفاوت Swoole و RoadRunner

ویژگی Swoole RoadRunner
پشتیبانی از وب‌سوکت بله خیر (به صورت پیش‌فرض)
Concurrency بله (Coroutine) خیر (مدیریت ساده‌تر)
سادگی نصب نسبتاً سخت‌تر آسون‌تر

بهترین Practices برای Octane

  • وابستگی‌های سنگین رو singleton تعریف کن.
  • از stateless design استفاده کن (اطلاعات درخواست رو داخل property کلاس ذخیره نکن).
  • برای session و queue از Redis استفاده کن.
  • قبل از رفتن به production، تست load بگیر (مثل wrk یا ab).

جمع‌بندی

Laravel Octane یک ابزار قدرتمنده که می‌تونه سرعت پروژه‌های لاراولی رو چند برابر کنه. ولی مهمه بدونی که همیشه لازم نیست. برای اپلیکیشن‌های کوچک یا پروژه‌های ساده، همون PHP-FPM کافیه. اما وقتی پروژه‌ت بزرگ و پرترافیک می‌شه، Octane می‌تونه تفاوت بزرگی ایجاد کنه. انتخاب درست یعنی این که بدونی کجا Octane لازم داری و کجا نه.