آرش کدخدائی

افزایش سرعت لاراول

۲۱ مهر ۱۳۹۶ - آموزش

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

نکته اینکه قرارم بر این بوده که هرجا بتونم توی هر موضوعی متنی رو به فارسی در وب منتشر کنم حتی اگه ترجمه باشه. این یادداشت ترجمهٔ ساده از مقالهٔ Speeding up  Laravel in Simple Steps هست که یه راهنمای خیلی ساده و جمع و جوره.

استفاده از Cookie به جای فایل برای Sessionها

تغییر متغیرهای محیطی و تنظیمات معمولاً عملکرد اپلیکیشن رو تا حد قابل قبولی ارتقا می‌ده. بسته به سایت شما میزان تفاوت عملکردی فرق می‌کنه ولی بر طبق تجربه‌ها معمولاً شرایط بهتر می‌شه. تغییر درایور سشن از فایل به داریور هم خیلی ساده ست.

  1. فایل .env داخل پروژه رو باز کنید.
  2. متغیر SESSION_DRIVER رو پیدا کنید.
  3. مقدار این متغیر رو به cookie  تغییر بدید.

به این شکل

SESSION_DRIVER=cookie

چرا استفاده از کوکی به جای فایل عملکرد رو ارتقا می‌ده؟

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

کوکی و فایل‌های ثابت

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

بنچمارک

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

ab -n 1000 -c 25 "http://laravel-file-vs-cookie.dev/"

نتیجه برای استفاده از درایور فایل برای سشن به صورت زیره.

Concurrency Level: 25 Time taken for tests: 15.264 seconds Complete requests: 1000 Requests per second: 65.51 [#/sec] (mean)

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 80 377 45.5 366 537 Waiting: 80 377 45.5 366 537 Total: 81 377 45.4 366 537

و برای استفاده از درایور کوکی برای سشن هم به صورت زیره.

Concurrency Level: 25 Time taken for tests: 13.880 seconds Complete requests: 1000 Requests per second: 72.05 [#/sec] (mean)

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 77 343 26.7 342 477 Waiting: 77 343 26.7 342 477 Total: 78 343 26.7 342 478

همون طوری که مشخصه نتایج متفاوته و اگه از کوکی استفاده کنیم تقریباً نزدیک به 6.54 ریکوئست بیشتر در یک ثانیه می‌تونیم سرو کنیم.

کش کردن route و config

راه دیگه‌ٔ افزایش سرعت لاراول کش کردن روت و کانفیگ‌ها ست. یادتون باشه شما فقط زمانی می‌تونید روت رو کش کنید که تمام روت‌ها به کنترلرها اشاره کنند.

روش انجام این کار هم بسیار ساده ست.

  1. با ترمینال وارد پوشهٔ پروژه بشید.
  2. برای کش کردن کانفیگ دستور php artisan config:cache رو بزنید.
  3. برای کش کردن روت دستور php artisan route:cache رو بزنید.

بنچمارک

توی این بنچمارک از یه اپلیکیشن تازه نصب شده دیگه استفاده شده که ده تا Resource Controllers داره. برای بنچمارک هم از دستور زیر استفاده شده.

ab -n 1000 -c 25 "http://laravel-route-config-cache.dev/posts"

نتیجهٔ بنچمارک قبل از کش کردن روت و کانفیگ:

Concurrency Level: 25 Time taken for tests: 16.139 seconds Complete requests: 1000 Requests per second: 61.96 [#/sec] (mean)

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 79 399 52.1 390 581 Waiting: 79 399 52.1 390 581 Total: 80 399 52.1 390 581

نتیجهٔ بنچمارک بعد از کش کردن:

Concurrency Level: 25 Time taken for tests: 11.931 seconds Complete requests: 1000 Requests per second: 83.81 [#/sec] (mean)

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 58 295 45.5 287 531 Waiting: 58 295 45.5 287 531 Total: 59 295 45.4 287 531

نتایج ممکنه خیلی متفاوت باشه ولی توی این نتایج ما تونستیم 21,85 ریکوئست بیشتری رو در ثانیه سرو کنیم و واقعاً ارزشش رو داره.

چرا کش کردن روت و کانفیگ عملکرد رو ارتقا می‌ده؟

علت این همه ارتقا عملکرد در بنچمارک ما این هست که اساساً ایجاد route برای اپلیکیشن هزینه بر و سنگین هست و اگر روت‌ها کش نشده باشند، توی هر ریکوئستی دوباره ساخته می‌شند.

 

فراموش نکنید پس از هر تغییری در روت و کانفیگ‌های پروژه حتماً‌ کش رو پاک کنیم و در صورت نیاز دوبار کش کنیم.

php artisan route:clear php artisan config:clear

Artisan Optimize

کار دیگه‌ای که باعث افزایش سرعت لاراول می‌شه اینه که از کامند php artisan optimize استفاده کنیم. این کامند کلاس لودرها و به طور کلی تمام اپلیکیشن رو بهینه‌سازی می‌کنه. البته ارتقا و تغییر فاحشی در عملکرد ایجاد نمی‌کنه ولی به هر حال تاثیر اندک خودش رو داره. در اینجا بنچمارکی هم برای این روش نداریم چون تغییر زیادی در نتایج بنچمارک قابل مشاهده نیست.

ضمن اینکه فراموش نکنید که در لاراول ۵.۵ و نسخه‌های بعد این کامند در حال حذف شدنه.


اگه واقعاً دنبال یک تغییر جدی در سرعت لاراول هستید آموزش‌های زیادی هست برای روش‌های پیشرفته‌تر هست که یکی از اون‌‌ها Performant Laravel هست که کریس فیدائو ساخته شده

طراحی با ♥ توسط آرش کدخدائی الیادرانی (@slasharash)