بهینه سازی راه اندازی PHP OPcache

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


به اصطلاح زمان بوت برای هر سه سیستم ذکر شده بیش از 100 میلی ثانیه با یک سرور CentOS7 تازه نصب شده (با SSD و PHP 7.1) است. هر بار که یک اسکریپت PHP اجرا می شود ، باید در زمان اجرا در bytecode کامپایل شود. اکنون OPcache حافظه پنهانی را برای این bytecode پیاده سازی می کند - اگر همان اسکریپت PHP با درخواست بعدی اجرا شود ، نیازی به کامپایل مجدد نیست. پس از فعال کردن OPcache ، تنظیمات زیر را تنظیم می کنیم:

9006cec6c5d3d2498ee26c5bfd91590a

اکنون زمان اعدام (به طور متوسط ​​بیش از 10 اعدام) به طور قابل توجهی کاهش یافته است:

وردپرس 4.7.4 جوملا 3.7 لاراول 5.4
بدون OPCache 295 میلی ثانیه 201 میلی ثانیه 110 میلی ثانیه
با OPCache 54 میلی ثانیه 59 میلی ثانیه 13 میلی ثانیه
عامل 5,5 3,5 8,5

از آنجایی که ما validate_timestamps را روی 0 تنظیم کرده و در عین حال revreate_freq را به مدت یک روز تنظیم می کنیم ، حافظه پنهان تقریباً هرگز به طور خودکار بازسازی نمی شود (ما آگاهانه این کار را دستی انجام می دهیم). با یک قلاب git کوچک ، یک اسکریپت PHP با هر "کشیدن" اجرا می شود. نحوه فعال سازی قلاب:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

عملکرد کمکی زیر نیز برای اندازه گیری جداگانه قطعات کد (یا کل زمان اجرا) مفید است:

085f4291bbcc4e8a64bbea951ff49ab9

اگر می خواهید اطلاعات مفیدی مانند وضعیت ، حافظه استفاده شده یا تعداد پرونده های ذخیره شده را بدست آورید ، از این عملکرد PHP استفاده می کنید:

3f6309d04bc7e48dd909859321b96209

به منظور بهره مندی از OPcache در یک محیط توسعه محلی (که معمولاً توصیه نمی شود) ، ما از یک ترفند استفاده می کنیم.

OPcache در تمام سرورهایی که ماژول OPcache نصب شده و تنظیمات opcache.enable بر روی آنها به وضوح تنظیم نشده فعال است. ما آن را به همین ترتیب رها می کنیم. ما فقط opcache.validate_timestamps = 1 را در php.ini تنظیم می کنیم. این بدان معنی است که opcache.revalidate_freq = 2. این بدان معنی است که OPcache تقریباً به طور مداوم برای هر پروژه اعتبارسنجی می شود. برای آن دسته از پروژه هایی که می خواهیم OPcache را به طور دائمی فعال کنیم ، از پروژه مرتبط استفاده می کنیم در تنظیمات زیر .htaccess:

1dd64a3f2fe4425b29b1409410fe3fc0

سپس وب سرور را مجدداً راه اندازی کرده و اسکریپت زیر را ایجاد می کنیم:

91fb5289160e410607c9ea89112a575b

این اسکریپت حافظه پنهان را پاک کرده و همزمان بازسازی می کند. حالا ما یک دستور RunOnSave مربوط به فضای کاری را در ویرایشگر مورد علاقه خود VSCode تنظیم کرده ایم:

91fb5289160e410607c9ea89112a575b

بازگشت