افزایش سرعت لاراول (Laravel) با OPcache

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

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

هر بار که بخواهید یک اسکریپت php را اجرا کنید، اسکرپیت باید به بایت کد تبدیل یا کامپایل شود. OPcache این بایت کد را کش (Cache) کرده و در دفعات بعد که همان اسکریپت درخواست شود، این اسکریپت دوباره با بایت کد تبدیل نخواهد شد، بلکه از همان بایت کد کش شده استفاده می شود و با این کار افزایش سرعت لاراول اتفاق می افتد.

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

نگاه آماری به OPcache

ابتدا باید بدانیم که در مورد کدام نوع از بهینه سازی صحبت می کنیم. بهبود کارایی بستگی زیادی به برنامه و پیکربندی سرورتان دارد، اما می توان با یک آزمایش سریع، یک ایده در مورد بهینه سازی به شما ارائه دهیم.

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

من کارم را با یک آزمایش کوچک روی سیستمی با 1 گیگابایت رم، یک CPU، که یک سرور آپاچی روی آن در حال اجراست، شروع می کنم. و آزمایش را برای یک دقیقه با 10 کانکشن همزمان انجام می دهم.

OPcache disabled: 10.18 requests per second

برای یک سرور کوچک چیز بدی نیست، اما می توان کمی آن را بهبود داد.

Enabled with default values: 34.52 requests per second

تفاوت را می بینید؟ حال اجازه دهید کمی بیشتر آن را بهینه سازی کنیم.

Enabled with optimized values: 42.53 requests per second

هنوز متقاعد نشدید؟

به نظر جالب می آید، حالا چطور باید از آن استفاده کرد؟

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

نصب OPcache روی سرور لاراول

ابتدا باید مطمئن شویم که OPcache روی سرورتان نصب شده است تا افزایش سرعت لاراول را بتوانیم انجام دهیم. اگر سرورتان را اخیراً پیکربندی کرده باشید به احتمال زیاد روی آن نصب شده است، چون OPcache توسط اکثر سرویس دهنده ها، ارائه می شود. در صورتی که از Laravel Forge استفاده می کنید، OPcache قبلاً روی آن نصب شده است. (حداقل در نسخه اخیر به این صورت است)

برای بررسی نصب بودن آن کد php زیر را اجرا می کنیم

<?php
phpinfo();

دستور بالا تمام اطلاعات درباره نسخه php نصب شده در سرور به ما می دهد. کلمه OPcache را جستجو کنید، اگر پیدا شد یعنی قبلاً نصب شده است.

در صورتی که روی سرورتان نصب نشده باشد، می توانید دستورالعمل نصب آن را از اینترنت پیدا کنید.

حال فهمیدیم که روی سیستم مان نصب است و برای استفاده ار قابلیت های آن باید آن را پیکربندی کنیم.

در Laravel Forge با انتخاب files > Edit Php FPM Configuration فایل پیکربندی php را باز کنید.

در سرورهای دیگر، باید فایل php.ini را پیدا کنید. در صفحه ای که phpinfo() را اجرا کردید و در قسمت Loaded Configuration File می توانید مسیر فایل php.ini را پیدا کنید و سپس آن را با ویرایشگر مورد علاقه خود باز کنید.

حال در این فایل باید بعضی از مقادیر را تغییر دهیم. خط زیر را در این فایل پیدا کرده و آن را مطابق زیر تغییر دهید.

opcache.enable=1

دستور بالا OPcache را فعال می کند.

opcache.memory_consumption=512

در کد بالا مشخص کنید که چه مقدار از فضای حافظه را می خواهید به OPcache اختصاص دهید؟ این مقدار را بسته به نیازتان تغییر دهید. (این عدد بر حسب مگابایت بوده و باید بالاتر از 64 باشد)

opcache.interned_strings_buffer=64

در کد بالا مشخص می کنید که می خواهید چند مگابایت به رشته های ورودی اختصاص دهید؟ یک عدد بالای 16 را انتخاب کنید.

opcache.max_accelerated_files=32531

کد بالا مشخص کنید که چه تعداد اسکریپت باید کش شوند؟. این عدد را تا حدامکان نزدیک و یا بیشتر از تعداد اسکریپت های پروژه تان تعیین کنید. می توانید یکی از این مقادیر را انتخاب کنید:3907، 7963، 16229، 32531، 65407، 130987.

برای دریافت اطلاعات بیشتر به لینک زیر مراجعه کنید.

http://php.net/manual/en/opcache.configuration.php#ini.opcache.max-accelerated-files

opcache.validate_timestamps=0

کد بالا اسکریپت را اعتبارسنجی مجدد می کند. در صورتی که مقدار 0 را بدهید (یعنی بهترین کارایی)، در این حال اگر کدهای php برنامه تان تغییری پیدا کند، باید به صورت دستی OPcache را خالی کنید. در صورتی که نمی خواهید خودتان آن را خالی کنید، باید مقدار 1 را به آن بدهید و توسط کد opcache_revalidate_freq فاصله زمانی اعتبارسنجی مجدد را پیکربندی کنید، اما این کار کمی از کارایی سرور کم می کند، چون هر n ثانیه بطور خودکار تغییرات کدهای php  بررسی می شود.

opcache.save_comments=1

کد بالا کامنت های اسکریپت تان را نگه می دارد. پیشنهاد می کنم به همین صورت نگه دارید، چون بعضی از کتابخانه ها به این مقدار وابستگی دارند، و من هیچ فایده ای در غیرفعال کردن آن نمی بینم. (بجز صرفه جویی در چند بایت از حافظه رم)

opcache.fast_shutdown=0

Fast shutdown قاعدتاً باید مکانیزمی سریع تر برای پاکسازی حافظه ارائه کند، اما در آزمایش های من اینکار کمی کندتر انجام شد. این دستور ممکن سرعت برنامه تان را کمی بهبود بدهد، اما باید خودتان آن را امتحان کنید.

در نهایت، پیکربندی این فایل باید مطابق زیر باشد:

opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=0

این مقادیر را بسته به اندازه برنامه و منابع سرورتان امتحان کنید.

آماده سازی برای تست افزایش سرعت لاراول

همان طور که قبلاً گفتیم، هر زمان که کدهای php برنامه را تغییر دادیم، باید بصورت دستی OPcache را خالی کنیم (البته می شود به صورت اتوماتیک هم اینکار انجام شود، که در قسمت های قبلی مقاله توضیح دادیم)

من یک پکیج طراحی کردم که می توانید توسط دستورات Artisan با OPcache کار کنید.

برای نصب این پکیج به این ریپازیتوری بروید:

http://github.com/appstract/laravel-opcache

سپس دستور زیر را در محیط ترمینال وارد کنید.

php artisan opcache:clear

این پکیج ابزارهای مفید دیگری هم برای کار با opcache دارد که جزئیات آن را می توانید در صفحه گیت هاب پروژه ببینید.

Laravel Forge یک  دکمه برای فعال کردن OPcache دارد که زیر تب ‘PHP’ سرورتان قرار گرفته است. این کار OPcache را فعال و به افزایش سرعت لاراول و بهینه سازی آن کمک می کند.

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

نویسنده شوید

دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

علیرضا
27 تیر 1398
سلام، خیلی مفید و کاربردی بود، خدا خیرت بده سعید اقا

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.