هر بار که بخواهید یک اسکریپت php را اجرا کنید، اسکرپیت باید به بایت کد تبدیل یا کامپایل شود. OPcache این بایت کد را کش (Cache) کرده و در دفعات بعد که همان اسکریپت درخواست شود، این اسکریپت دوباره با بایت کد تبدیل نخواهد شد، بلکه از همان بایت کد کش شده استفاده می شود و با این کار افزایش سرعت لاراول اتفاق می افتد.
این کار باعث صرفه جویی در زمان، افزایش سرعت و کاهش هزینه سرور می شود.
ابتدا باید بدانیم که در مورد کدام نوع از بهینه سازی صحبت می کنیم. بهبود کارایی بستگی زیادی به برنامه و پیکربندی سرورتان دارد، اما می توان با یک آزمایش سریع، یک ایده در مورد بهینه سازی به شما ارائه دهیم.
من کارم را با یک آزمایش کوچک روی سیستمی با 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 توسط اکثر سرویس دهنده ها، ارائه می شود. در صورتی که از 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 را فعال و به افزایش سرعت لاراول و بهینه سازی آن کمک می کند.
امیدوارم این مقاله برای شما مفید بوده و بتواند باعث افزایش سرعت برنامه تان شود.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.