در اینجا سعی کردم هر چیزی که از OpCache و نحوه ی استفاده از اون توی php نیاز هست بدونیم رو به صورت سریع و کاربردی توی یک پست توضیح بدم ;)
چیه این OpCache
خوب اول بگیم که OpCache در واقع یک Bytecode Caching Engine هست که php از ورژن 5.5 به بعد به صورت built-in در خودش داره.
پس اگر تاقبل از اون از APC و یا Xcache استفاده می شد دیگه نیازی به اونها نداریم.
دقیقا OpCache چی کار میکنه برای ما؟
دقیقا عملکرد سایت ما رو optimize می کنه :)))
اسکریپت های php برای اجرا در زمان runtime ابتدا به bytecode کامپایل می شوند پس در هر بار اجرای یک script این تبدیل زمان بر انجام خواهد شد.
خوب این جا هست که OpCache به کمک می آید و بعد از یک بار کامپایل کد های ما، اونها رو cache میکنه روی RAM (ویا روی یک فایل رو دیسک) و می توانیم در دفعات بعدی بدون نیاز به کامپایل مجدد فقط bytecode ها رو اجرا کنیم.
آیا ارزش دارد که از OpCache استفاده کنیم؟
بله قطعا!
اگر سایت شما تعداد بالایی درخواست را در هر ثانیه پاسخ می دهد و زمان پاسخ دهی برای شما مهم هست OpCache یکی از مواردی هست که حتما باید از اون استفاده کنید.
اما این که به چه میزان OpCache سایت ما را بهینه می کند کاملا بستگی به شرایط دارد و script های مختلف بهره متفاوتی از OpCache می برند برای مثال اگر شما در کدتون اتصال زمان بر و کوئری سنگینی برروی دیتابیس دارید این مورد تاثیر زیادی روی میانگین زمان پاسخ درخواست های سایتتون داره.
با توجه به شرایط به طور میانگین OpCache میتونه تا حدود ۵۰٪ میانگین زمان پاسخ دهی به درخواست ها را کم کند! ;)
در لینک های زیر می توانید نتایج دقیق از بررسی میزان تاثیر گزاری OpCache در سایت های مختلف رو ببینید:
همان طوری که در نتیجه ی بررسی های این ۳ تا سایت مشخص هست قطعا استفاده از OpCache تاثیر خیلی زیادی در عملکرد سایت ما خواهد داشت پس در ادامه نحوه ی استفاده از اون رو باهم ببینیم.
چطوری OpCache رو فعال کنیم؟
همان طور که گفته شد OpCache در ورژن ۵.۵ به بعد در php وجود داره و تنها کاری که شما برای فعال کردن و تنظیم اون نیاز دارید انجام دهید از طریق فایل php.ini هست.
ابتدا php.ini نسخه ی فعلی php خودتون رو پیدا کنید و اون رو با ویرایشگری که دوست دارید باز کنید.
خط پایین را در این فایل پیدا کنید و اون رو از comment با پاک کردن ; خارج کنید و مطمئن شوید مقدار آن ۱ به معنی enable باشد.
opcache.enable=1
چطوری OpCache رو تنظیم کنیم
حالا برای تنظیم موارد اصلی OpCache مقادیر زیر رو داریم که با توجه به پروژه خودتون اونها رو می توانید مقدار دهی کنید:
opcache.revalidate_freq=0 opcache.validate_timestamps=0 (comment this out in your dev environment) opcache.max_accelerated_files=7963 opcache.memory_consumption=192
توضیح directive های بالا برای تنظیم OpCache:
۱) مقدار opcache.revalidate_freq در واقع مشخص می کند که دوره ی بررسی script های cache شده به چه صورت باشد؟
اگر مقدار اون ۰ باشد OpCache در هر درخواست که به سرور برسد بررسی میکند که آیا script تغییر داشته است یا خیر.
برای محیط develop مقدار ۰ میتواند استفاده شود اما در محیط production برمبنای ثانیه میتوانید به آن مقدار دهید که script های cache شده را بررسی کند و اگر نیاز بود مجدد cache کند.
۲) مقدار opcache.validate_timestamps می تواند ۰ و یا ۱ باشد.
اگر ۱ به معنای enable باشد یعنی مقدار opcache.revalidate_freq رو بخون و طبق توضیحی که در بالا دادیم عمل کن اما اگر برابر ۰ باشد کلا opcache.revalidate_freq را ندید می گیرد و فقط در زمانی که سرویس رو restart کنیم cache ها را بررسی می کند!
۳) مقدار opcache.max_accelerated_files محدودیت تعداد فایلی را که می تواند cache کند رو مشخص می کند که خوب با توجه به پروژه خودتون و تعداد فایل های php باید مقدار دهی شود برای مثال اگر شما 7155 تا فایل php دارید مقدار 7200 می توانید بدهید.
برای دریافت تعداد فایل php خودتون هم از دستور زیر در لینوکس و در دایرکتوری پروژه استفاده کنید:
find . -type f -print | grep php | wc -l
۴) و اما در آخر مقدار opcache.memory_consumption میزان RAM اختصاص داده شده به OpCache رو مشخص می کند، مقداری که ما دادیم برابر 192 مگابایت هست.
بعد از تغییر این خطوط در php.ini و ذخیره اون ابتدا وب سرور و fpm رو restart کنید تا OpCache فعال شود.
اگر در کد php خودتون خواستید وضعیت OpCache رو ببینید از opcache_get_status استفاده کنید که یک آرایه بر می گرداند و شامل اطلاعاتی مانند وضعیت فعال یا غیر فعال بودن OpCache, میزان RAM مصرف شده و یا میزان RAM خالی باقی مانده از حداکثر تخصیص داده شده می باشد.
ابزار گرافیکی بررسی وضعیت OpCache
برای مشاهده وضعیت OpCache یعنی میزان RAM مصرف شده، تعداد فایل Cache شده و ... ابزار های گرافیکی تقریبا زیادی وجود دارد که ساده ترین اونها opcache-status هست که توسط Rasmus Lerdorf نوشته شده و بسیار ساده و در یک صفحه اطلاعات مهمی را که نیاز دارید از وضعیت OpCache به شما می دهد:
نحوه ی نصب opcache-status هم خیلی ساده هست فقط کافی هست اون رو دانلود کنید که تنها یک فایل به اسم opcache.php می باشد و در مرورگر خود این فایل را باز کنید و مطابق تصویر بالا اون رو ببینید.
wget https://raw.github.com/rlerdorf/opcache-status/master/opcache.php
نتیجه گیری
در این پست دیدیم که OpCache یک cache کننده ی اسکریپت های کامپایل شده php به bytecode هست و می تونه زمان پاسخ دهی درخواست ها و تعداد درخواست های پاسخ دهی شده در هر ثانیه رو با توجه به شرایط پروژه بسیار بهبود بده.
هم چنین روش نصب و پیکربندی اون رو در php ورژن 5.5 به بعد دیدیم و تنظیمات مهم تر اون رو باهم مرور کردیم و در آخر هم یک ابزار گرافیکی ساده برای مشاهده وضیعت OpCache نصب کردیم.
امیدوارم این پست برای شما مفید بوده باشه :)