امروز : ۱۰ تیر ۱۴۰۵ (2026/07/01)

16 تکنیک حرفه‌ ای برای افزایش سرعت و بهینه‌ سازی عملکرد لاراول

لاراول به عنوان یکی از محبوب ترین فریمورک های PHP می باشد که طی سال های گذشته و به خصوص چند سال اخیر جایگاه بسیار خوبی را در بین توسعه دهندگان وب پیدا کرده است!

سادگی در یادگیری به همراه ساختار منظمی که دارد در کنار جامعه کاربری بزرگ و ابزارهای متنوعی که در اختیار برنامه نویسان قرار می دهد باعث شده است بسیاری از پروژه های کوچک و بزرگ از این فریمورک استفاده کنند و توسعه پیدا کنند!

از مهم ترین ویژگی های لاراول سرعت بالای توسعه نرم افزار هست این فریمورک بخاطر این که بسیاری از نیاز های رایج توسعه دهندگان را در خود قرار داده است باعث می شود زمان کمتری صرف پیاده سازی قابلیت های تکراری شود و همین موضوع باعث می شود که تیم توسعه زمان بیشتری داشته باشد تا بتواند روی منطق کسب و کار و نیاز های پروژه تمرکز کند و فیچر های بهتری را به پروژه اضافه کند!

با این حال نمی توان از این قضیه گذشت که هرچه پروژه بزرگتر می شود موضوع مهم دیگری اهمیت پیدا می کند و آن هم حفظ عملکرد و سرعت سیستم می باشد! در واقع چالشی که بسیاری از پروژه ها با آن مواجه می شوند ساخت قابلیت جدید نیست بلکه حفظ کیفیت و سرعت سیستم در بلند مدت است!

پروژه ای که در ماه های اولیه توسعه بدون مشکل کار می کند ممکن است بعد از مدتی با افزایش حجم داده ها٬ پیچیده تر شدن منطق برنامه و اضافه شدن بخش های جدید رفتار متفاوتی را نشان دهد و گاهی اوقات صفحاتی که قبلا در کسری از ثانیه بارگذاری می شدند به تدریج کند می شوند و برخی از عملیات ها زمان بیشتری برای اجرا نیاز خواهند داشت!

البته این نکته را در نظر داشته باشید که این موضوع به ضعف لاراول برنمی گردد در واقع بخش زیادی از مشکلاتی که در پروژه رخ می دهد و عملکرد را کاهش می دهد به نحوه طراحی و پیاده سازی پروژه مربوط می شود و انتخاب های فنی که در طول توسعه انجام شده است می تواند تاثیر مستقیمی در سرعت و پایداری سیستم داشته باشد!

 

آیا مشکلات کندی پروژه‌ های لاراول واقعا از خود لاراول هستند؟

این یکی از تصورات اشتباهی هست که در میان برخی توسعه دهندگان به خصوص توسعه دهندگانی که تازه ابتدای مسیر هستند رایج هست!

برخی فکر می کنند هر زمان که پروژه با کاهش سرعت و افت عملکرد مواجه شده است مقصر اصلی خود لاراول می باشد این در حالی است که در بیشتر مواقع این کندی ناشی از نحوه پیاده سازی پروژه و کدنویسی می باشد و ارتباطی به لاراول ندارد!

لاراول یک فریمورک مجهز و کامل می باشد که خیلی از امکانات را در اختیار توسعه دهندگان قرار می دهد و همین امکانات گسترده باعث شده که بتوان از آن برای توسعه انواع سیستم ها٬ از وب سایت های شرکتی گرفته تا فروشگاه های اینترنتی٬ پنل های مدیریتی٬ سرویس های آنلاین و API های بزرگ و سریع استفاده کرد!

اما همه ی این امکانات و ویژگی ها زمانی مفید هستند که به شکل صحیح و اصولی از آن استفاده شود و از اشتباهات رایجی که وجود دارد پرهیز شود!

یکی از این اشتباهات که در بسیاری از پروژه ها دیده می شود در واقع این است که توسعه دهنده در مراحل ابتدایی پروژه توجه زیادی به بهینه سازی ندارد و دلیل هم کاملا مشخص هست در شروع کار همه چیز سریع است! داده ها کم است و تعداد کاربران محدود می باشد!

مشکل اصلی زمانی شروع می شود که پروژه رشد می کند! با افزایش تعداد کاربران٬ حجم داده های ذخیره شده افزایش پیدا می کند و در خواست های همزمان به بخش های مختلف پروژه بیشتر می شود و بخش های سیستم پیچیده تر می شود و در این شرایط اگر زیرساخت نرم افزار به شکل اصولی طراحی نشود افت عملکرد کم کم خود را نشان می دهد و به یکی از چالش های اصلی پروژه تبدیل می شود.

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

گاهی توسعه دهندگان تصور می کنند به محض کند شدن سیستم باید قدرت سخت افزار را افزایش دهند شاید در چند مرتبه این کار پاسخ مثبتی دهد و مشکل اصلی را در خود پنهان کند! اما هرچقدر پروژه بزرگتر شود دیگر نمی توان به همان اندازه سخت افزار را افزایش دهد چون علاوه بر مشکلاتی فنی که دارد باعث تحمیل هزینه های سنگین به پروژه می شود و هیچ وقت هم نمی تواند جایگزین یک معماری نرم افزاری اصولی شود!

پس به خاطر داشته باشید هرچقدر پروژه بهینه تر و اصولی تر طراحی شود منابع سخت افزاری کمتری نیاز دارد هزینه را کاهش می دهد و بهره وری و سرعت بالاتر خواهد بود!

خوشبختانه لاراول ابزارهای بسیار قدرتمندی را برای مدیریت عملکرد در اختیار توسعه‌ دهندگان قرار داده است. قابلیت‌ هایی مانند Cache، Queue، Redis، Eager Loading، Route Cache و بسیاری امکانات دیگر دقیقا با هدف افزایش سرعت و بهبود عملکرد سیستم طراحی شده‌ اند.

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

16 تکنیک کاربردی افزایش سرعت Laravel:

در ادامه این مقاله، به سراغ 16 تکنیک مهم و کاربردی می‌ رویم که رعایت آن‌ ها می‌ تواند تاثیر بسیار زیادی بر سرعت، پایداری و عملکرد نهایی پروژه‌های لاراول داشته باشد و عملکرد سیستم را در زمانی که رشد می کند و کاربران افزایش می یابد در حد ایده آل بالا نگه خواهد داشت و دچار افت سرعت و عملکرد نخواهید شد!

1- استفاده از Eager Loading و جلوگیری از N+1 Query:

تکنیک دیگری که در پروژه های لاراول باعث بهبود عملکرد و افزایش سرعت می شود استفاده از Eager Loading می باشد!

این قابلیت کاربردی به شما کمک می کند هنگام کار با روابط یا همان ٬Relationships تعداد Query های ارسالی به پایگاه داده را به حداقل برسانید!

در خیلی از پروژه ها نمایش اطلاعات وابسته به همدیگر کاملا رایج می باشد! برای مثال ممکن است بخواهید لیست مقالات را به همراه نام نویسنده هر مقاله نمایش دهد اگر روابط به شکل درستی مدیریت نشود تعداد زیادی Query غیرضروری به پایگاه داده ارسال خواهد شد و عملکرد سیستم به مرور تحت تاثیر قرار میگیرد!

فرض کنید قصد دارید لیستی از مقالات را به همراه اطلاعات نویسنده آن‌ ها دریافت کنید.

نمونه زیر یکی از حالت‌ های متداول پیاده‌ سازی را نشان می‌دهد:

$posts = Post::all();

foreach ($posts as $post) {
    echo $post->user->name;
}

در این حالت، لاراول ابتدا تمام مقالات را دریافت می‌ کند، اما هنگام دسترسی به اطلاعات نویسنده، برای هر رکورد یک Query جداگانه اجرا خواهد شد. این اتفاق با عنوان N+1 Query شناخته می‌ شود.

هرچقدر تعداد داده‌ ها بیشتر شود، تعداد Query های اجرا شده نیز افزایش پیدا می‌ کند و این موضوع می‌ تواند فشار زیادی به پایگاه داده وارد کند.

برای حل این مسئله، لاراول قابلیت Eager Loading را در اختیار توسعه‌ دهندگان قرار داده است.

با استفاده از متد with() می‌ توان اطلاعات مربوط به روابط را همزمان با داده‌ های اصلی دریافت کرد.

$posts = Post::with('user')->get();

foreach ($posts as $post) {
    echo $post->user->name;
}

در پروژه‌ های بزرگ معمولا بیش از یک رابطه وجود دارد و می‌ توان چندین رابطه را به صورت همزمان بارگذاری کرد.

$posts = Post::with([
    'user',
    'category',
    'comments'
])->get();

استفاده از Eager Loading مزایای متعددی دارد:

کاهش تعداد Query های پایگاه داده

افزایش سرعت پاسخ‌ دهی

کاهش فشار روی سرور

بهبود عملکرد سیستم در زمان ترافیک بالا

افزایش مقیاس‌ پذیری پروژه

به طور کلی، هر زمان که قرار است داده‌ های مرتبط با یکدیگر را نمایش دهید، بهتر است از Eager Loading استفاده کنید. این تکنیک یکی از مهم‌ ترین اصول بهینه‌ سازی در لاراول محسوب می‌ شود و استفاده صحیح از آن می‌ تواند تاثیر قابل توجهی بر عملکرد نهایی پروژه داشته باشد.

2- بهینه‌ سازی Query های پایگاه داده:

بهینه سازی Query های دیتابیس و نحوه نوشتن این Query ها مورد دیگری هست که در سرعت پروژه های لاراول نقش بسزایی دارد! در بسیاری از مواقع مشکل از خود لاراول نیست که سیستم کند شده است و چیزی به ذهن شما نمی رسد! در این شرایط باید حتما این درخواست هایی که به سمت دیتابیس می رود مورد بررسی قرار بگیرد!

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

در شروع کار طبیعی هست که حجم درخواست ها به سمت دیتابیس بالا نیست و سیستم هم به سادگی این درخواست ها را پاسخ می دهد و مشکلی هم حس نمی شود ولی وقتی تعداد درخواست ها به دیتابیس بالا می رود و این وسط Query های نامناسب هم وجود داشته باشد به یک معضل جدی بدل خواهد شد.

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

برای مثال:

$users = User::all();

در این حالت، تمام ستون‌ های جدول کاربران دریافت می‌ شوند؛ حتی اگر فقط به نام و ایمیل کاربران نیاز داشته باشیم.

روش بهتر این است که تنها داده‌ های مورد نیاز را انتخاب کنیم:

$users = User::select('id', 'name', 'email')->get();

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

برای مثال:

$users = User::where('status', 'active')->get();

بهینه‌ سازی Query های پایگاه داده مزایای زیادی دارد که از مهم‌ترین آن‌ ها می‌ توان به موارد زیر اشاره کرد:

کاهش تعداد Query های اجرا شده

کاهش زمان پاسخ‌ دهی سیستم

کاهش مصرف حافظه

کاهش فشار روی پایگاه داده

افزایش پایداری پروژه در زمان ترافیک بالا

بهتر این کار این است که ابتدا Query های پیچیده مورد بررسی و تحلیل قرار بگیرند گاهی یک Query که در ابتدا مشکل ایجاد نمی کند با حجم داده جداول می تواند به یکی از عوامل کاهش سرعت و عملکرد سیستم تبدیل شود و چون در ابتدای کار مشکلی نداشت باعث می شود توسعه دهنده فکر کند مشکلی ندارد!

به طور کلی، هرچه داده‌ های کمتری دریافت و پردازش شوند، سیستم سریع‌ تر عمل خواهد کرد. بهینه‌ سازی Query ها یکی از ساده‌ترین اما تاثیرگذارترین اقداماتی است که می‌ تواند در بلندمدت عملکرد پروژه‌ های لاراول را به شکل محسوسی بهبود دهد.

3- ایجاد Index روی پایگاه داده:

وقتی پروژه بزرگ تر می شود و حجم اطلاعات هم هر روز بیشتر از قبل می شود٬ سرعت جستجو و بازیابی داده ها به یکی از مهم ترین عوامل تاثیرگذار بر عملکرد سیستم تبدیل می شود! در چنین شرایطی٬ استفاده از Index در پایگاه داده می تواند نقش بسیار مهمی در افزایش سرعت اجرای Query ها داشته باشد!

به شکل ساده تر می تواند گفت ایندکس ها ساختارهایی هستند که به دیتابیس کمک می کنند تا داده های مورد نیاز را سریع تر پیدا کنند. در واقع بدون وجود ایندکس پایگاه داده مجبور است برای پیدا کردن یک مقدار مشخص٬ تعداد زیادی از رکورد های ثبت شده تر جداول را مورد بررسی قرار دهد و هرچقدر حجم دیتابیس ها بزرگتر شود زمان بیشتری هم نیاز است تا پاسخ دهد!

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

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

لاراول این امکان را فراهم کرده است که هنگام ساخت Migration ها بتوان به سادگی ایندکس‌ های مورد نیاز را تعریف کرد.

برای مثال:

Schema::table('users', function (Blueprint $table) {
    $table->index('email');
});

همچنین می‌ توان برای چند ستون به صورت همزمان نیز ایندکس ایجاد کرد.

Schema::table('orders', function (Blueprint $table) {
    $table->index([
        'user_id',
        'created_at'
    ]);
});

این نکته را در نظر داشته باشید که در استفاده از ایندکس ها باید دقت کنید! ایجاد ایندکس روی تمام ستون ها کمکی به افزایش سرعت نمی کند بلکه ممکن است باعث افزایش مصرف حافظه و کاهش سرعت عملیات ثبت٬ ویرایش و حذف اطلاعات شود!

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

در جستجوها where زیاد استفاده می‌ شوند.

در عملیات مرتب‌ سازی orderBy کاربرد زیادی دارند.

در روابط بین جداول foreign key استفاده می‌ شوند.

در فیلتر های پرتکرار مورد استفاده قرار می‌ گیرند.

به کارگیری صحیح ایندکس‌ ها مزایای متعددی به همراه دارد که مهم‌ ترین آن‌ ها عبارت‌ اند از:

افزایش سرعت جستجو در پایگاه داده

کاهش زمان اجرای Query ها

کاهش فشار روی سرور

بهبود عملکرد سیستم در حجم بالای داده‌ ها

افزایش مقیاس‌ پذیری پروژه

به طور کلی ایندکس ها جزو بخش هایی هستند که در ابتدا خیلی به آن توجه نمی شود اما در ادامه نیاز است که از آن برای افزایش سرعت اجرای Query ها استفاده شود.

طراحی صحیح ایندکس‌ ها از همان ابتدای توسعه می‌ تواند از بروز بسیاری از مشکلات عملکردی در آینده جلوگیری کند.

4- استفاده از Pagination به جای دریافت همه داده‌ ها:

نمایش اطلاعات به صورت صفحه بندی شده هم یکی از راهکار های خوب و موثری هست که برای بهبود عملکرد پروژه های لاراول مورد استفاده قرار می گیرد!

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

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

نمونه‌ای از این روش به شکل زیر است:

$users = User::all();

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

راهکار مناسب، استفاده از Pagination است.

لاراول به صورت پیش فرض ابزار های خوبی را برای صفحه بندی کردن در اختیار توسعه دهنده قرار می دهد و این تنها با چند خط کد می توان اطلاعات را در صفحات مختلف نمایش داد!

برای مثال:

$users = User::paginate(20);

در این مثال، تنها 20 رکورد در هر درخواست دریافت می‌ شود و کاربران می‌ توانند از طریق لینک‌ های صفحه‌ بندی به سایر داده‌ ها دسترسی داشته باشند.

لاراول علاوه بر paginate()، روش‌ های دیگری مانند simplePaginate() و cursorPaginate() را نیز ارائه می‌ دهد که در شرایط خاص می‌توانند عملکرد بهتری داشته باشند.

از مزایای Pagination می توان به موارد زیر اشاره کرد:

کاهش حجم داده‌ های دریافتی در هر درخواست

کاهش مصرف حافظه سرور

افزایش سرعت اجرای Query ها

بهبود زمان بارگذاری صفحات

افزایش پایداری سیستم در حجم بالای داده‌ ها

در پروژه هایی که تعداد رکورد ها زیاد هست استفاده از صفحه بندی یک ضرورت محسوب می شود و اگر انجام نشود افت عملکرد در این پروژه ها قطعی خواهد بود!

تفاوتی ندارد که سرور شما چقدر قدرتمند هست! دریافت هزاران رکورد در یک درخواست می تواند منابع سیستم را بی دلیل مصرف کند و تجربه کاربری نامناسبی ایجاد کند و وقتی هم پروژه به صورت مداوم رشد کند سرور های قدرتمند را هم دچار چالش می کند.

 

استفاده از Cursor Pagination در داده‌های حجیم:

در بخش قبل با Pagination معمولی آشنا شدیم، اما زمانی که حجم داده‌ ها بسیار زیاد باشد، استفاده از روش‌ های پیشرفته‌ تر می‌ تواند عملکرد بهتری ارائه دهد. یکی از این روش‌ ها در لاراول، Cursor Pagination است.

در Pagination معمولی، پایگاه داده برای نمایش هر صفحه از دستور OFFSET استفاده می‌ کند. هرچقدر شماره صفحه بزرگ‌ تر شود، دیتابیس باید تعداد بیشتری از رکوردهای قبلی را بررسی کند تا به داده‌ های مورد نظر برسد. این موضوع در جداولی که میلیون‌ ها رکورد دارند می‌ تواند باعث کاهش سرعت اجرای Query ها شود.

لاراول برای حل این مشکل متد cursorPaginate() را ارائه کرده است. در این روش، به جای استفاده از OFFSET، موقعیت آخرین رکورد دریافت‌ شده به عنوان مرجع صفحه بعدی در نظر گرفته می‌ شود و همین موضوع باعث می‌ شود عملکرد بسیار بهتری در حجم بالای داده‌ ها داشته باشد.

البته باید توجه داشت که Cursor Pagination برای همه سناریوها مناسب نیست. این روش معمولا زمانی استفاده می‌ شود که داده‌ ها بر اساس یک ستون یکتا مانند id یا created_at مرتب شده باشند و کاربر نیازی به پرش مستقیم به صفحات دلخواه نداشته باشد.

به طور کلی، اگر پروژه شما با حجم بسیار زیادی از داده‌ ها سروکار دارد، استفاده از Cursor Pagination می‌ تواند نسبت به Pagination معمولی عملکرد بهتری ارائه دهد و فشار کمتری به پایگاه داده وارد کند.

 

5- استفاده کردن از Cache:

یکی از ساده ترین و تاثیرگذارترین روش هایی که می توان انجام داد و باعث بهبود عملکرد لاراول شد استفاده از سیستم کش می باشد!

استفاده از کش در پروژه های لاراول ساده هست ولی همچنان دیده می شود خیلی از پروژه ها به شکل مناسبی از آن استفاده نمی کنند و برنامه ناچار هست برای هر درخواست تکراری یک عملیات را چندین مرتبه انجام دهد و منابع سیستم را درگیر کند!

در حالت عادی هر بار که کاربر یک صفحه را باز می کند ممکن است برنامه چندین بار به پایگاه داده متصل شود و داده ها را دریافت کند٬ پردازش های مختلفی انجام دهد و در نهایت نتیجه به کاربر نشان داده می شود و اگر این اطلاعات مرتب تغییر نکند دیگر تکرار هر باره ی این عملیات منطقی نیست و باعث مصرف بی دلیل منابع سرور می شود!

برای مثال، اطلاعاتی مانند تنظیمات سایت، دسته‌ بندی‌ ها، لیست استان‌ ها، منو ها، داده‌ های آماری یا اطلاعاتی که تغییرات کمی دارند، جزو مواردی هستند که می‌ توانند در حافظه ذخیره شوند تا در درخواست‌ های بعدی دوباره تولید نشوند.

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

به عنوان نمونه:

$categories = Category::all();

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

لاراول ابزارهای بسیار خوبی برای مدیریت Cache در اختیار توسعه‌ دهندگان قرار داده است و می‌ توان داده‌ ها را برای مدت زمان مشخصی در حافظه ذخیره کرد.

نمونه زیر یکی از روش‌ های متداول استفاده از کش را نشان می‌دهد:

$categories = Cache::remember(
    'categories',
    3600,
    function () {
        return Category::all();
    }
);

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

استفاده صحیح از Cache مزایای متعددی دارد که از مهم‌ ترین آن‌ ها می‌ توان به موارد زیر اشاره کرد:

کاهش تعداد Query های پایگاه داده

افزایش سرعت پاسخ‌ دهی سیستم

کاهش فشار روی سرور

کاهش مصرف منابع سخت‌ افزاری

افزایش مقیاس‌ پذیری پروژه

البته این نکته که همه داده ها برای کش شدن مناسب نیستند را هم باید در نظر داشته باشید! اطلاعاتی که به صورت مرتب تغییر می کنند در صورت مدیریت نادرست ممکن است باعث شود کاربران شما و یا خود تیم توسعه دهنده اطلاعات قدیمی را مشاهده کند به همین دلیل انتخاب داده های مناسب برای ذخیره سازی در کش اهمیت زیادی دارد!

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

6- استفاده از Redis:

با وجود تمام راهکار هایی که در خصوص کش در پروژه های لاراول گفتیم و قابلیت هایی که خود لاراول در این خصوص در اختیار توسعه دهنده قرار می دهد اما استفاده از Redis یکی از بهترین گزینه های برای پروژه هایی می باشد که نیاز به عملکرد بالا و پاسخ دهی سریع دارند!

ردیس یک پایگاه داده مبتنی بر Ram می باشد که داده ها را مستقیم در Ram نگهداری می کند و همین ویژگی باعث می شود دسترسی به اطلاعات ذخیره شده در ردیس بسیار سریعتر از روش های دیگر مانند ذخیره سازی روی فایل یا حتی پایگاه داده باشد!

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

لاراول نیز پشتیبانی کاملی از Redis ارائه می‌ دهد و به سادگی می‌ توان آن را به عنوان Cache Driver اصلی پروژه انتخاب کرد.

برای مثال، در فایل .env می‌توان درایور کش را روی Redis قرار داد:

CACHE_DRIVER=redis

پس از انجام تنظیمات، تمام عملیات کش از طریق Redis مدیریت خواهد شد.

استفاده از Redis در کنار قابلیت‌ های کش لاراول می‌تواند تاثیر قابل توجهی بر عملکرد سیستم داشته باشد.

برای نمونه:

$products = Cache::remember(
    'products',
    3600,
    function () {
        return Product::latest()->get();
    }
);

در این مثال، داده‌ ها در Redis ذخیره می‌ شوند و درخواست‌ های بعدی بدون مراجعه مستقیم به پایگاه داده پاسخ داده خواهند شد.

استفاده از Redis مزایای متعددی دارد:

سرعت بسیار بالا در خواندن و نوشتن داده‌ ها

کاهش تعداد Query های پایگاه داده

کاهش بار پردازشی سرور

افزایش سرعت پاسخ‌ دهی برنامه

بهبود عملکرد پروژه‌ های پرترافیک

افزایش مقیاس‌ پذیری سیستم

ردیس تنها در لاراول وظیفه کش را برعهده ندارد و کاربردهای فراوان دیگری هم دارد برای مثال می توان از آن برای مدیریت Queue ها، Session ها، Rate Limiting و بسیاری از قابلیت‌ های دیگر استفاده کرد. به همین دلیل، بسیاری از پروژه‌ های متوسط و بزرگ از Redis به عنوان یکی از اجزای اصلی زیرساخت خود استفاده می‌ کنند.

البته استفاده از Redis برای همه پروژه‌ ها ضروری نیست. در پروژه‌ های کوچک، درایورهای ساده‌ تر مانند File Cache نیز می‌ توانند پاسخگوی نیازها باشند. اما زمانی که حجم داده‌ ها و تعداد درخواست‌ ها افزایش پیدا می‌کند، Redis به یکی از موثرترین ابزار های بهینه‌ سازی عملکرد تبدیل می‌ شود.

به طور کلی، اگر به دنبال افزایش سرعت دسترسی به داده‌ های کش‌شده و کاهش فشار روی پایگاه داده هستید، Redis یکی از بهترین انتخاب‌ ها در اکوسیستم لاراول محسوب می‌ شود و می‌ تواند نقش مهمی در بهبود عملکرد و مقیاس‌ پذیری پروژه ایفا کند.

7- استفاده از Queue برای انجام پردازش‌ های سنگین:

یکی دیگر از قابلیت های بسیار خوب لاراول که تاثیر مستقیمی هم بر روی عملکرد سیستم دارد استفاده از Queue یا همان صف های پردازشی است! این قابلیت به شما اجازه می دهد بخشی از عملیات هایی که عموما به زمان بیشتری برای اجرا نیاز دارند را از درخواست اصلی کاربر جدا کنید و در پس زمینه اجرا کنید!

در خیلی از پروژه ها همه عملیات ها به صورت همزمان و در همان لحظه ای که کاربر درخواست ارسال می کند اجرا می شوند! شاید در ابتدا این موضوع مشکلی نباشد اما وقتی پروژه بزرگتر می شود و تعداد کاربران آنلاین سیستم اضافه می شود در کنار آن درخواست ها هم بالا می رود و می تواند باعث کاهش سرعت پاسخ دهی سیستم شود!

برای مثال ارسال ایمیل٬ ارسال پیامک٬ پردازش تصاویر٬ تولید فایل های ٬PDF وارد کردن حجم زیادی از اطلاعات و حتی برخی گزارش های آماری جزو پردازش هایی هستند که معمولا زمان بیشتری برای اجرا نیاز دارند!

اگر این عملیات ها مستقیم و همزمان با درخواست کاربر اجرا شوند٬ کاربر باید منتظر بماند تا پردازش ها به اتمام برسد تا سیستم درخواست را انجام دهد و همین اتلاف وقت و کندی حتی اگر چند ثانیه هم بیشتر طول نکشد تجربه کاربری نامناسبی را ایجاد می کند!

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

در این شرایط خیلی از توسعه دهندگان ممکن است این کار را مستقیما انجام دهند:

Mail::to($user->email)
    ->send(new WelcomeMail($user));

در این حالت درخواست های کاربر تا زمان برقراری ارتباط با سرویس ایمیل و ارسال کامل آن متوقف می شود! راه حل مناسب این است که این عملیات به Queue منتقل شود و در صف پردازشی قرار بگیرد.

برای این کار ابتدا یک Job ایجاد می‌ کنیم:

php artisan make:job SendWelcomeEmail

سپس عملیات مورد نظر را به صف ارسال می‌ کنیم:

SendWelcomeEmail::dispatch($user);

با این روش، لاراول وظیفه را به صف منتقل می‌ کند و کاربر بدون انتظار اضافی، پاسخ درخواست خود را دریافت خواهد کرد.

استفاده از Queue مزایای زیادی به همراه دارد:

افزایش سرعت پاسخ‌ دهی سیستم

کاهش زمان انتظار کاربران

توزیع بهتر بار پردازشی سرور

بهبود عملکرد سیستم در زمان ترافیک بالا

افزایش مقیاس‌ پذیری پروژه

لاراول از چندین درایور مختلف برای مدیریت صف ها پشتیبانی می کند و در بسیاری از پروژه های واقعی٬ استفاده از ردیس یکی از گزینه های محبوب برای مدیریت Queue می باشد!

اگر بخواهیم یک قانون ساده در این باره برای لاراول بنویسیم باید بگوییم: به طور کلی هر پردازشی که اجرای آن به چند ثانیه زمان نیاز دارد یا وابسته به سرویس های خارجی هست گزینه مناسبی هست به Queue منتقل شود!

استفاده صحیح از این قابلیت علاوه بر اینکه سرعت سیستم را افزایش می دهد باعث تجربه کاربری روان تر و حرفه ای تر هم برای کاربران می شود.

 

8- استفاده از Route Cache:

هر بار که یک درخواست به پروژه های لاراول می شود در واقع لاراول باید تمام مسیر های تعریف شده را بررسی کند تا درخواست کاربر به بخش مناسب هدایت شود! این فرآیند در ابتدا هیچ مشکلی ندارد چون Route های زیادی وجود ندارد ولی با افزایش تعداد Route ها می تواند روی عملکرد کلی سیستم تاثیر می گذارد!

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

برای حل این مسئله، لاراول قابلیتی به نام Route Cache را در اختیار توسعه‌ دهندگان قرار داده است.

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

برای فعال کردن Route Cache کافی است دستور زیر را اجرا کنید:

php artisan route:cache

اگر در آینده تغییری در فایل‌ های Route ایجاد کردید، باید کش قبلی را پاک کرده و دوباره آن را ایجاد کنید.

برای پاک کردن کش مسیرها می‌ توان از دستور زیر استفاده کرد:

php artisan route:clear

استفاده از Route Cache مزایای مختلفی دارد که مهم‌ ترین آن‌ ها عبارت‌ اند از:

کاهش زمان پردازش درخواست‌ ها

افزایش سرعت اجرای برنامه

کاهش مصرف منابع سرور

بهبود عملکرد پروژه‌ های بزرگ

افزایش پایداری سیستم در زمان ترافیک بالا

البته یک نکته مهم را هم باید در نظر گرفت. Route Cache در همه شرایط قابل استفاده نیست. اگر از Closure ها به صورت مستقیم داخل Route ها استفاده کرده باشید، لاراول امکان کش کردن آن‌ ها را نخواهد داشت.

برای مثال، بهتر است به جای این روش:

Route::get('/users', function () {
    return view('users');
});

از Controller ها استفاده کنید:

Route::get('/users', [
    UserController::class,
    'index'
]);

به طور کلی، Route Cache شاید به اندازه Cache یا Queue مشهور نباشد، اما در پروژه‌ های متوسط و بزرگ می‌تواند یکی از راهکارهای ساده و موثر برای بهبود عملکرد لاراول باشد.

مهم‌ تر از همه اینکه فعال‌ سازی آن زمان زیادی نیاز ندارد و با چند دستور ساده می‌ توان از مزایای آن بهره‌ مند شد.

9- استفاده از Config Cache:

بخش عمده از تنظیمات سیستم در پروژه های لاراولی در فایل های مختلف موجود در پوشه config نگهداری می شود و این تنظیمات شامل تنظیمات دیتابیس٬ سرویس های جانبی٬ سرویس های کش٬ صف ها و ایمیل و بسیاری از بخش های دیگر هست که در طول فعالیت پروژه مورد استفاده قرار می گیرد!

به صورت پیش فرض لاراول با هر درخواستی این فایل را بارگذاری می کند و تنظیمات مورد نیاز را در اختیار بخش های مختلف سیستم قرار می دهد این فرآیند در پروژه های بزرگ و پر ترافیک می تواند منابع را درگیر کند و سرعت پاسخگویی را کند کند!

راهکاری که خود لاراول برای آن در نظر گرفته است این است که از قابلیتی به نام Config Cache استفاده شود!

با استفاده از این قابلیت تمام تنظیمات پروژه در یک فایل واحد ذخیره می شود و هنگام اجرای برنامه نیاز نیست که هر بار فایل های مختلفی بارگذاری و پردازش جداگانه نیاز نخواهد بودو. لاراول می تواند تنظیمات را سریع تر در اختیار بخش های مختلف قرار دهد

برای ایجاد Config Cache کافی است دستور زیر را اجرا کنید:

php artisan config:cache

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

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

برای حذف کش فعلی می‌توان از دستور زیر استفاده کرد:

php artisan config:clear

استفاده از Config Cache مزایای مختلفی به همراه دارد:

کاهش زمان بارگذاری تنظیمات

افزایش سرعت اجرای برنامه

کاهش تعداد عملیات خواندن فایل‌ ها

بهبود عملکرد سرور در درخواست‌ های پرتعداد

افزایش بهره‌ وری در محیط Production

یک نکته مهم دیگر که در استفاده از Config Cache وجود دارد این است که پس از فعالسازی آن لاراول به صورت مستقیم از فایل .env در زمان اجرا نمی خواند و مقادیر مورد نیاز تنظیمات کش شده را دریافت می کند و به همین دلیل هست که گاهی هر تغییری در این فایل داده می شود در پروژه تاثیری ندارد و حتما باید کانفیگ کش یکبار ریست شود تا درخواست ها خوانده شود.

کانفیگ کش یکی از ساده ترین کارهایی هست که برای افزایش کیفیت پروژه های لاراول می تواند انجام داد و جزو قابلیت های بهینه سازی خوبی هم می باشد اما خیلی از توسعه دهندگان به آن توجه نمی کنند در حالی که فعالسازی آن تنها چند ثانیه زمان می برد و می تواند در کنار سایر تکنیک های بهینه سازی به بهبود عملکرد کلی پروژه کمک کند!

 

10- بهینه‌ سازی فایل‌ های View با View Cache:

در لاراول، قالب‌ های Blade نقش مهمی در نمایش اطلاعات به کاربران دارند. این قالب‌ ها علاوه بر سادگی و خوانایی، امکانات متعددی مانند شرط‌ ها، حلقه‌ ها، کامپوننت‌ ها و ارث‌ بری از Layout ها را در اختیار توسعه‌ دهندگان قرار می‌ دهند. اما قبل از اینکه یک فایل Blade در مرورگر نمایش داده شود، لاراول باید آن را پردازش و به کد PHP قابل اجرا تبدیل کند.

به طور معمول، لاراول نسخه کامپایل‌ شده فایل‌ های Blade را در حافظه ذخیره می‌ کند و تنها در صورت تغییر فایل، آن را مجددا کامپایل خواهد کرد. با این حال، در پروژه‌ های بزرگ که تعداد زیادی View و کامپوننت دارند، بهتر است از قابلیت View Cache برای بهینه‌ سازی بیشتر استفاده شود.

View Cache باعث می‌شود تمام فایل‌ های Blade پروژه از قبل کامپایل شوند و لاراول در زمان اجرای درخواست‌ ها نیازی به بررسی و پردازش مداوم آن‌ ها نداشته باشد.

برای ایجاد View Cache کافی است دستور زیر را اجرا کنید:

php artisan view:cache

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

در صورتی که بخواهید کش View ها را حذف کنید، می‌ توانید از دستور زیر استفاده کنید:

php artisan view:clear

استفاده از View Cache مزایای مختلفی دارد:

کاهش زمان پردازش فایل‌ های Blade

افزایش سرعت بارگذاری صفحات

کاهش مصرف منابع سرور

بهبود عملکرد کلی برنامه

افزایش بهره‌ وری در محیط Production

این نکته را فراموش کنید که قابلیت View Cache بیشتر برای محیط های پروداکشن می باشد و در محیط های توسعه چون فایل های Blade به صورت مداوم در حال تغییر هستند باعث می شود تغییرات جدید تا زمانی که کش ها را بروز نکنید نمایش داده نشود!

همچنین بهتر است View Cache را در کنار سایر ابزار های بهینه‌ سازی لاراول مانند Route Cache و Config Cache استفاده کنید. ترکیب این قابلیت‌ ها می‌تواند تاثیر قابل توجهی بر سرعت اجرای برنامه داشته باشد، به‌ ویژه در پروژه‌ هایی که تعداد درخواست‌ های زیادی را پردازش می‌ کنند.

11- استفاده از OPcache در PHP:

هر کار که یک فایل PHP اجرا می شود مفسر PHP ابتدا کد را می خواند و آن را تجزیه یا همان Parse می کند و سپس به کد قابل اجرا تبدیل می کند! این عملیات برای تمام فایل های پروژه تکرار می شود و در پروژه های بزرگ می تواند بخشی از منابع پردازشی سرور را مصرف کند!

در پروژه های لاراولی در هر درخواست ده ها یا حتی صد های فایل PHP مورد استفاده قرار می گیرند و اگر قرار باشد این فایل ها هر بار مجدد پردازش شوند زمان بیشتری برای پاسخگویی به درخواست ها نیاز خواهد بود.

اینجاست که با قابلیت OPcache می توان این مورد را به سادگی هندل کرد!

OPcache یکی از افزونه‌ های رسمی PHP است که کد های کامپایل‌ شده را در حافظه نگهداری می‌ کند. به این ترتیب، زمانی که درخواست جدیدی به سرور ارسال می‌ شود، PHP به جای تجزیه و کامپایل مجدد فایل‌ ها، از نسخه آماده‌ ای که در حافظه ذخیره شده استفاده می‌ کند.

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

برای فعال‌سازی OPcache کافی است تنظیمات مربوط به آن در فایل پیکربندی PHP فعال شود:

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1

پس از اعمال تغییرات، معمولا لازم است سرویس PHP یا وب‌ سرور ریستارت شود تا تنظیمات جدید اعمال شوند.

استفاده از OPcache مزایای متعددی دارد:

افزایش سرعت اجرای فایل‌ های PHP

کاهش مصرف CPU

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

بهبود عملکرد کلی پروژه‌ های لاراول

افزایش توان پردازش همزمان سرور

این نکته را هم در نظر داشته باشید که OPcahce تنها مختص لاراول نیست و برای تمام پروژه های PHP کاربرد دارد اما تاثیر آن در فریمورک هایی مانند لاراول که تعداد زیادی فایل و کلاس را در هر درخواست بارگذاری می کند به مراتب بیشتر احساس می شود!

امروزه تقریبا تمام سرورهای Production از OPcache استفاده می‌ کنند و بسیاری از ارائه‌ دهندگان هاست نیز این قابلیت را به صورت پیش‌ فرض فعال کرده‌ اند. به همین دلیل، قبل از صرف هزینه برای ارتقای سخت‌ افزار، بهتر است مطمئن شوید که OPcache به درستی روی سرور شما فعال و پیکربندی شده است.

12- استفاده از Laravel Octane:

استفاده از لاراول اکتان یکی از پیشرفته ترین راهکار های افزایش سرعت در لاراول می باشد! اکتان قابلیتی هست که توسط خود تیم لاراول توسعه داده شده و هدف آن کاهش پردازش درخواست ها و افزایش توان پاسخگویی برنامه در حجم بالای ترافیک می باشد!

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

Laravel Octane این مشکل را با استفاده از سرور های پرسرعتی مانند Swoole و RoadRunner حل می‌ کند. در این روش، برنامه لاراول تنها یک بار در حافظه بارگذاری می‌ شود و درخواست‌ های بعدی بدون نیاز به بوت مجدد کامل فریمورک پردازش خواهند شد.

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

برای نصب Laravel Octane می‌توان از دستور زیر استفاده کرد:

composer require laravel/octane

سپس مراحل نصب را اجرا می‌کنیم:

php artisan octane:install

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

php artisan octane:start

 

استفاده از Laravel Octane مزایای متعددی به همراه دارد:

افزایش چشمگیر سرعت پاسخ‌ دهی درخواست‌ ها

کاهش زمان بوت شدن برنامه

استفاده بهینه‌ تر از منابع سرور

افزایش توان پردازش همزمان درخواست‌ ها

بهبود عملکرد API های پرترافیک

مناسب برای پروژه‌ های بزرگ و مقیاس‌ پذیر

البته باید توجه داشت که Laravel Octane برای همه پروژه‌ ها ضروری نیست. در بسیاری از وب‌ سایت‌ های کوچک و متوسط، استفاده از تکنیک‌ هایی که در این مقاله گفتیم مشکل را حل می کند و نیاز به اقدام بیشتری نیست!

همچنین هنگام استفاده از Octane باید دقت بیشتری در مدیریت State برنامه داشت چون بخشی از داده‌ ها در حافظه باقی می‌ مانند و برخی الگوهای کدنویسی که در اجرای معمول PHP مشکلی ایجاد نمی‌ کنند، ممکن است در محیط Octane رفتار متفاوتی داشته باشند.

به طور کلی، زمانی که پروژه به مرحله‌ ای می‌رسد که تعداد کاربران، حجم درخواست‌ ها و نیاز به پردازش همزمان افزایش پیدا می‌ کند، Laravel Octane می‌ تواند یکی از موثرترین ابزارهای موجود برای افزایش عملکرد و مقیاس‌ پذیری سیستم باشد و در بسیاری از موارد بدون نیاز به ارتقای سخت‌ افزار، بهبود قابل توجهی در سرعت برنامه ایجاد کند.

 

Swoole یا RoadRunner ؟ کدام گزینه برای Laravel Octane بهتر است؟

همانطور که گفتیم لاراول اکتان برای افزایش سرعت و بهبود عملکرد از دو موتور اصلی به نام Swoole و RoadRunner استفاده می کند که هر دو برای حذف فرآیند بوت تکراری لاراول و افزایش توان پردازش درخواست ها طراحی شدند اما تفاوت هایی هم با یکدیگر دارند که ممکن است برای توسعه دهندگان سوال شود که کدام را باید انتخاب کنند!

Swoole یک اکستنشن برای PHP است که قابلیت‌ هایی مانند پردازش همزمان، WebSocket، Task Worker و Coroutine را در اختیار توسعه‌ دهندگان قرار می‌ دهد. به دلیل اینکه در سطح پایین‌ تری با PHP در ارتباط است، معمولا عملکرد بسیار بالایی دارد و در بسیاری از بنچمارک‌ ها یکی از سریع‌ ترین گزینه‌ های موجود محسوب می‌ شود.

در مقابل، RoadRunner یک Application Server مبتنی بر زبان Go است که بدون نیاز به نصب Extension های PHP کار می‌ کند. راه‌اندازی و نگهداری آن در برخی زیرساخت‌ ها ساده‌ تر است و بسیاری از تیم‌ ها به دلیل پایداری و سهولت استقرار از آن استفاده می‌ کنند.

به طور کلی می‌توان تفاوت این دو را به شکل زیر خلاصه کرد:

Swoole: حداکثر کارایی و امکانات بیشتر

RoadRunner: راه‌اندازی ساده‌ تر و سازگاری بهتر با برخی محیط‌ های سرور

Swoole: نیازمند نصب PHP Extension

RoadRunner: بدون نیاز به Extension اختصاصی PHP

هر دو: عملکرد بسیار سریع‌ تر نسبت به اجرای سنتی PHP-FPM

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

اگر تازه قصد استفاده از Laravel Octane را دارید، انتخاب هر یک از این دو گزینه می‌ تواند بهبود قابل توجهی در عملکرد برنامه ایجاد کند و مهم‌تر از انتخاب موتور، استفاده صحیح از معماری و الگوهای مناسب برای اجرای برنامه در محیط Octane است.

13- فشرده‌ سازی فایل‌ های CSS و JavaScript:

سرعت بارگذاری صفحات تنها به عملکرد سمت سرور و دیتابیس وابسته نیست و بخش زیادی از تجربه کاربری به سرعت دانلود و پردازش فایل هایی بستگی دارد که در مرورگر برای نمایش صفحات به آن نیاز است!

در میان این فایل ها٬ CSS ها و جاوا اسکریپت ها معمولا بیشترین حجم را دارند و اگر بهینه سازی نشوند می توانند زمان بارگذاری صفحات را افزایش دهند.

برای مثال فرض کنید حجم یک صفحه قبل از بهینه سازی و کاهش حجم در حدود 10 مگابایت هست این یعنی هر بار که کاربر وارد صفحه می شود باید این حجم را دانلود کند و اگر بهینه سازی های درست انجام شود و حجم صفحه به زیر سه مگابایت برسد طبیعی هست که سرعت بارگذاری صفحه برای کاربر به یک سوم حدودا کاهش می یابد!

 

 

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

یکی از راهکارهای موثر برای کاهش حجم فایل‌ های استاتیک، Minification یا فشرده‌ سازی کدها است. در این فرآیند، فاصله‌ های اضافی، خطوط خالی، کامنت‌ ها و بخش‌ هایی که برای اجرای برنامه ضروری نیستند حذف می‌ شوند تا حجم نهایی فایل کاهش پیدا کند.

خوشبختانه لاراول ابزارهای مناسبی برای مدیریت و بهینه‌ سازی فایل‌ های Front-End در اختیار توسعه‌ دهندگان قرار می‌ دهد. امروزه بسیاری از پروژه‌ های لاراول از Vite برای مدیریت Asset ها استفاده می‌ کنند که علاوه بر کامپایل فایل‌ ها، فرآیند Minify کردن آن‌ ها را نیز در زمان Build انجام می‌ دهد.

برای تولید نسخه بهینه‌شده فایل‌ها کافی است دستور Build اجرا شود:

npm run build

در این حالت، فایل‌های CSS و JavaScript به صورت فشرده تولید شده و آماده استفاده در محیط Production خواهند بود.

فشرده‌سازی فایل‌های Front-End مزایای متعددی دارد:

کاهش حجم فایل‌ های CSS و JavaScript

افزایش سرعت بارگذاری صفحات

کاهش مصرف پهنای باند

بهبود تجربه کاربری

افزایش امتیاز ابزارهایی مانند Google PageSpeed Insights

علاوه بر فشرده‌ سازی، بهتر است فایل‌ های بدون استفاده نیز از پروژه حذف شوند. گاهی اوقات کتابخانه‌ ها یا فایل‌ هایی در پروژه باقی می‌مانند که دیگر مورد استفاده قرار نمی‌ گیرند اما همچنان توسط مرورگر دانلود می‌ شوند و باعث افزایش زمان بارگذاری صفحات خواهند شد.

به طور کلی، بهینه‌سازی Asset های Front-End یکی از بخش‌ هایی است که معمولاً کمتر مورد توجه قرار می‌ گیرد، اما می‌تواند تاثیر مستقیمی بر سرعت نهایی وب‌ سایت داشته باشد.

 

14- حذف Package های غیرضروری:

یکی از مزیت های خوب لاراول این است که پکیج های زیادی را در اختیار توسعه دهنده قرار می دهد تا بتواند برای حل مشکلات از آن ها استفاده کند و نیاز نباشد همه چیز را از صفر بنویسد! از احراز هویت گرفته تا مدیریت فایل و پرداخت! تقریبا در لاراول برای هر کاری می توان یک پکیج مناسب پیدا کرد!

اما اگر همین مزیت به شیوه درست و اصولی مورد استفاده قرار نگیرد می تواند به یک نقطه ضعف جدی تبدیل شود!

در بسیاری از پروژه ها پکیج هایی که نصب می شوند تنها بخشی از قابلیت های آن ها مورد استفاده قرار می گیرد یا حتی پس از مدتی کاملا بدون استفاده می شوند و با گذشت زمان تعداد این وابستگی ها افزایش پیدا می کند و پروژه را سنگین تر از چیزی می کند باید باشد!

هر Package جدید معمولا فایل‌ ها، کلاس‌ ها، Service Provider ها، تنظیمات و وابستگی‌ های خاص خود را به پروژه اضافه می‌ کند. در نتیجه، لاراول هنگام راه‌ اندازی برنامه باید منابع بیشتری را بارگذاری کند و این موضوع می‌ تواند روی عملکرد کلی سیستم تاثیر بگذارد.

برای بررسی پکیج‌ های نصب‌شده می‌توان از دستور زیر استفاده کرد:

composer show

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

اگر پکیجی دیگر مورد استفاده نباشد، بهتر است آن را از پروژه حذف کنید:

composer remove package-name

این نکته را فراموش نکنید که قبل از حذف هر پکیجی ابتدا باید اطمینان حاصل کنید که هیچ بخش سیستمی به آن وابسته نباشد! حذف بدون بررسی کردن می تواند باعث بروز اختلال در سیستم شود و کار را برای دیباگ سخت کند.

حذف وابستگی‌های غیرضروری مزایای مختلفی به همراه دارد:

کاهش حجم پروژه

کاهش زمان بارگذاری کلاس‌ ها و سرویس‌ ها

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

کاهش پیچیدگی نگهداری پروژه

کاهش ریسک مشکلات امنیتی ناشی از پکیج‌ های قدیمی

همیشه در زمان نصب هر پکیج یک سوال کلیدی وجود دارد که باید از خود بپرسید و آن هم این است که آیا واقعا به این پکیج نیاز دارید؟ در بسیاری از موارد فقط با چند خط کد ساده می توان به جای نصب یک کتابخانه مشکل را حل کرد و قابلیت جدید را اضافه کرد!

این نکته را فراموش نکنید که هر پکیجی که نصب می باشد باید بروزرسانی شود و آسیب پذیری های احتمالی امنیتی آن رفع شود و باید حتما با پکیج ها و نسخه های لاراول سازگار باشد و هرچقدر کتابخانه ها بیشتر شود رسیدگی به این موارد سخت تر می شود.

 

15- استفاده از ابزارهای مانیتورینگ و تحلیل عملکرد:

بهینه سازی عملکرد سیستم های لاراولی تنها محدود به استفاده از صف های پردازشی٬ کش یا بهبود Query ها نیست! با وجود تمام کارهایی که انجام دادید ممکن است مشکلات زیادی در بحث عملکرد وجود داشته باشد و حس کنید همچنان سیستم نیاز به بررسی های دقیق تر دارد!

برای اینکه بدانید مشکلات دقیقا در کدام بخش ها وجود دارد به همین دلیل استفاده از ابزار های مانیتورینگ و تحلیل عملکرد یکی از مهم ترین اقداماتی هست که هر توسعه دهنده لاراول باید به آن توجه داشته باشد!

خیلی از مواقع کاهش سرعت یک پروژه به صورت مستقیم امکان مشاهده ندارد و ممکن است یک صفحه چند ثانیه دیرتر بارگذاری شود و یا تعداد زیاد درخواست غیرضروری اجرا شود اما بدون ابزارهای مناسب نمی توان این مورد را تشخیص داد و کار ساده نخواهد بود!

لاراول مانند سایر مشکلات دیگر برای این مورد هم راهکار خوبی دارد! ابزار های مختلفی وجود دارد که با آن می توانید به مانیتورینگ و تحلیل عملکرد سیستم بپردازید که مهم ترین آن ها Laravel Telescope و Laravel Debugbar هستند.

Laravel Telescope ابزاری قدرتمند برای مشاهده و تحلیل اتفاقاتی است که در داخل برنامه رخ می‌ دهند. این ابزار اطلاعات مختلفی مانند درخواست‌ ها، Query های پایگاه داده، Job ها، Exception ها، Cache ها و رویدادهای سیستم را ثبت و نمایش می‌ دهد و به توسعه‌ دهندگان کمک می‌ کند مشکلات احتمالی را سریع‌ تر شناسایی کنند.

از طرف دیگر، Laravel Debugbar بیشتر روی فرآیند توسعه تمرکز دارد و اطلاعات ارزشمندی را مستقیما در صفحات وب نمایش می‌ دهد. تعداد Query های اجرا شده، مدت زمان اجرای درخواست، میزان مصرف حافظه و بسیاری از جزئیات دیگر از جمله اطلاعاتی هستند که این ابزار در اختیار توسعه‌ دهندگان قرار می‌دهد.

برای نصب Telescope می‌ توان از دستور زیر استفاده کرد:

composer require laravel/telescope --dev

 

و برای نصب Debugbar:

composer require barryvdh/laravel-debugbar --dev

یکی از اشتباهات رایج توسعه دهندگان لاراول این است که فرآیند بهینه سازی را زمانی شروع می کنند که کاربران دیگر از کندی سیستم شکایت می کنند! در حالی که اگر ابزارهای مانیتورینگ را از ابتدا روی سیستم داشته باشند قبل از اینکه این کندی ها و ضعف ها به یک معضل جدی و چالش بدل شود آن را شناسایی و رفع می کردند!

به طور کلی، اندازه‌ گیری عملکرد همیشه قبل از بهینه‌ سازی اهمیت دارد. بدون داشتن اطلاعات دقیق، هرگونه تغییر صرفا بر اساس حدس و احتمال خواهد بود. به همین دلیل، استفاده از ابزارهایی مانند Laravel Telescope و Laravel Debugbar می‌ تواند نقش مهمی در حفظ کیفیت، پایداری و عملکرد پروژه‌ های لاراول ایفا کند.

استفاده از Laravel Horizon برای مانیتورینگ Queue ها:

اگر در پروژه خود از صف بندی استفاده می کنید تنها ارسال Job ها به صف کافی نیست بلکه باید بتوانید وضعیت آن ها را هم بررسی و مدیریت کنید!

Laravel Horizon ابزاری رسمی از سوی تیم لاراول است که برای مدیریت و مانیتورینگ Queue هایی که بر پایه Redis کار می‌ کنند طراحی شده است. این ابزار یک داشبورد گرافیکی در اختیار توسعه‌ دهندگان قرار می‌ دهد تا بتوانند وضعیت صف‌ ها، تعداد Job های در حال پردازش، Job های ناموفق، مدت زمان اجرای پردازش‌ ها و میزان فعالیت Worker ها را به صورت لحظه‌ ای مشاهده کنند.

برای نصب Horizon می‌توان از دستور زیر استفاده کرد:

composer require laravel/horizon

سپس مراحل نصب را اجرا می‌ کنیم:

php artisan horizon:install

و برای اجرای Horizon:

php artisan horizon

یکی از مهم‌ترین مزایای Horizon این است که اطلاعات دقیقی درباره عملکرد Queue ها در اختیار شما قرار می‌ دهد. برای مثال می‌ توانید به سرعت متوجه شوید که کدام Job ها بیشترین زمان را مصرف می‌ کنند، چه تعداد Job در صف انتظار قرار دارند و آیا Worker های فعلی توان پاسخگویی به حجم پردازش‌ها را دارند یا خیر.

در پروژه‌ های کوچک شاید استفاده از Horizon ضروری نباشد، اما زمانی که تعداد Queue ها و پردازش‌ های پس‌ زمینه افزایش پیدا می‌ کند، این ابزار به یکی از بهترین گزینه‌ ها برای مدیریت و نظارت بر عملکرد سیستم تبدیل می‌شود.

به طور کلی، اگر Redis را به عنوان Queue Driver انتخاب کردید، Laravel Horizon می‌ تواند مکمل بسیار خوبی برای Queue ها باشد و دید دقیقی از وضعیت پردازش‌ های پس‌زمینه در اختیار تیم توسعه قرار دهد.

 

16- انتخاب هاست مناسب برای لاراول:

تمام تکنیک هایی که تا اینجای کار بررسی کردیم می تواند در صورت پیاده سازی اصولی تاثیر چشم گیری روی سرعت و عملکرد سیستم شما داشته باشد اما نباید از یک بخش مهم چشم پوشی کنیم و آن هم نقش زیرساخت مناسب در کیفیت پروژه های لاراول می باشد!

 

 

حتی اگر یک پروژه به بهترین شکل بهینه سازی شده باشد استفاده از یک هاست نامناسب می تواند بخشی از این مزایا را از بین ببرد و شما را دچار داون تایم های طولانی و کندی های شدید کند در حالی که شاید در ابتدا اصلا تصور نکنید این کندی ها به علت استفاده از هاست نامناسب می باشد!

در بسیاری از موارد، توسعه‌ دهندگان زمان زیادی را صرف بهینه‌ سازی کد ها، Query ها و سیستم کش می‌ کنند، اما در نهایت پروژه روی زیرساختی اجرا می‌ شود که برای میزبانی یک برنامه لاراولی طراحی نشده است. در چنین شرایطی، محدودیت منابع سرور، پیکربندی نامناسب ٬PHP نداشتن دسترسی به ترمینال و محیط کامند لاین و عدم پشتیبانی از ابزار های مدرن می‌ تواند روی عملکرد کلی سیستم تاثیر منفی بگذارد.

یک هاست مناسب لاراول باید از نسخه‌های بروز PHP، قابلیت OPcache، سیستم‌ های کش مانند Redis، مدیریت Queue ها و سایر ابزارهایی که لاراول برای دستیابی به حداکثر کارایی به آن‌ ها نیاز دارد، پشتیبانی کند.

همچنین سرعت دیسک، میزان حافظه در دسترس و نحوه مدیریت منابع سرور نیز از عواملی هستند که می‌ توانند روی زمان پاسخ‌ دهی برنامه تاثیرگذار باشند.

البته انتخاب هاست مناسب به تنهایی تضمین‌ کننده سرعت بالا نیست همان‌طور که بهینه‌ سازی کدها نمی‌ تواند ضعف‌ های یک هاست نامناسب را به طور کامل جبران کند. بهترین نتیجه زمانی حاصل می‌شود که بهینه‌ سازی نرم‌افزار و انتخاب هاست مناسب در کنار یکدیگر انجام شوند.

در نهایت، اگر قصد دارید یک پروژه لاراول را در محیط Production اجرا کنید، بهتر است هنگام انتخاب سرویس میزبانی تنها به فضای ذخیره‌ سازی یا قیمت توجه نکنید. پشتیبانی از قابلیت‌ های مورد نیاز لاراول، کیفیت زیرساخت و امکان توسعه‌ پذیری در آینده، از عواملی هستند که می‌ توانند تاثیر مستقیمی بر عملکرد و پایداری پروژه داشته باشند.

 

جمع‌ بندی:

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

از بهینه‌ سازی پایگاه داده و مدیریت Query ها گرفته تا استفاده از کش های مختلف و ابزارهای پیشرفته‌ ای مانند Laravel Octane.

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

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

 

قبلا در مقاله 17 تکنیک حرفه‌ ای برای افزایش سرعت NodeJS در خصوص راهکار های افزایش سرعت نود جی اس هم صحبت کردیم که می توانید مطالعه بفرمایید.

 

Rate this post