سلام به همه
امیدوارم حال همتون خوب باشه تو این روزایی که حال دنیا خوب نیست و همه ماسک زدن به صورت.
امروز تصمیم گرفتم یه پست کوچیک ارسال کنم درباره اینکه چطور Preloading رو فعال کنیم توی php برای اینکه سرعت اجرای اسکریپت بیشتر بشه.
حالا چرا باید سرعت اجرا اسکریپت بالا بره ؟ مگه خود php سریع نیست به اندازه کافی ؟
در پاسخ به این سوال و با تمام احترامی که به php میزارم باید بگم خیر php در مقابل حریفای تازه نفسش واقعا کند هست. (متاسفانه).
یک سالی هست که از دور صدای ورژن 8 از سایت php به گوش میرسه که قراره بیاد و با سرعت بالاتر و امکانات بهتر. اما تا آخر سال 2020 که همین امسال هم باشه خبری ازش نخواهد بود و شاید امسال اصلا خبری هم نشه. اما فعلا ورژن بتای php8 روی سایت رسمی php قرار گرفته. ولی فعلا منکه جرات استفاده ازش رو ندارم.
خب بگذریم از ناله کردن بریم سراغ اینکه یکم اسکریت php خودمون رو سرعت ببخشیم تا ورژن 8 سر و کلش پیدا بشه. (الهی آمین)
حدود چند ماهی هست که ورژن 7.4.9 به حالت استیبل رسیده و یه چند تایی خبر خوب با خودش آورده از جمله Preloading هست.
کار Preloading در php چی هست ؟
خیلی ساده بخوام بگم اینه که شما میتونید یکسری از فایل هاتون رو به php معرفی کنید تا اون براتون یکبار کامپایل بکنه و در حافظه سرور ذخیره کنه. پس قرار نیست هر دفعه که اون اسکریپت اجرا میشه همه فایل ها کامپایل بشه. این نتیجه خوبی توی بهبود سرعت php خواهد داشت.
چطور Preloading رو در php فعال کنیم ؟
باز هم خیلی ساده . فقط کافیه فایل php.ini رو باز کنید و چند تا تغییر ریز انجام بدیم. به عنوان مثال آدرس فایل php.ini من توی یک سرور debian این مسیر هست.
/etc/php/7.4/fpm/php.ini
وقتی باز کردین این فایل رو دنبال opcache.enable بگردین و مقدارش رو برابر 1 بزارید و اگر اول خطش ; داره اون رو حذف کنید.
یکم پایینتر که برید میرسید به opcache.preload که باید مقدارش رو برابر یک اسکریپت بزارید که دوست دارید کامپایل بشه. به عنوان مثال من یک فایل رو قرار دادم که اون فایل چند تا فایل دیگه رو include کرده توی خودش و یکجورایی hot class من هست.
پایینتر باید بگید کدوم یوزر سرور لینوکستون قراره صاحب این مقدار کامپایل شده باشه. اصولا نباید یوزر root رو قرار بدین چون مشکل امنیتی داره .من اینجا از یوزر www-data استفاده کردم.
خب تموم شد فایل رو ذخیره کنید و اگر مثه من از php-fpm استفاده میکنید اون رو یکبار restart کنید
service php7.4-fpm restart
شاید شما نیاز داشته باشید که apache یا nginx رو هم restart کنید . پس اینکار رو هم انجام بدین
خب حالا باید خوشحال باشید چونکه اسکریپتی که معرفی کردین فقط و فقط یکبار کامپایل میشه که این خیلی خوبه.
فقط چند تا نکته رو از یاد نبرید
- اینکار برای سرور های اشتراکی نیست و اگر سایتی دارید یا اپلیکشنی دارید که روی سرور خودتون هست استفاده کنید
- در تعداد فایل هایی که میدین به opcache انصاف رو رعایت کنید و همه پروژه رو ندین بهش که کامپایل کنه(فقط فایل های پر تکرار و سنگین)
- بعد از هر گونه تغییر توی اون فایل که معرفی کریدن باید دوباره php رو restart کنید
- تا اونجا که اطلاع دارم این امکان روی ورژن 7.4 کار میکنه.
و دیگه اینکه خیلی مراقب خودتون و اطرافیانتون باشید.