افزایش سرعت سایت PHP یکی از اهداف هر توسعه دهنده وبی است که با این زبان کار میکنه! با این حال برنامه نویسان عاشق جدیدترین نسخه PHP هستند چون یکی از سریعترین زبانهای برنامه نویسی است اما حفظ عملکرد مطلوب زحمت بیشتری نسبت به اجرای سریع کد داره!
تو این راهنما قراره همه چیزهایی که لازمه بدونین رو بهتون یاد بدم و کاری کنم که برنامههای PHP شما همیشه روان اجرا بشن.
تاریخچه PHP
PHP یه زبان برنامه نویسی است که توسط Rasmus Lerdorf در سال 1995 اختراع شد. در ابتدا برای استفاده شخصی توسعه گر در نظر گرفته شده بود. PHP از کلمه Personal Home Page گرفته شده بود با این حال Lerdorf عملکرد این زبان رو گسترش داد و دیگه میشه گفت مخفف Hypertext Preprocessor است.
در طی دو دهه گذشته تیم توسعه PHP پیشرفت زیادی در عملکرد این زبان داشتن که مهمترین اونها با معرفی Zend Engine در سال 1999 بود. PHP4 که تو سال 2000 منتشر شد، شامل یه کامپایلر در حافظه و الگوی اجرایی بود که اون رو فعال میکرد.
از PHP برای اجرای برنامه های وب پویا یا داینامیک استفاده میشه. در سال 2015، PHP 7.0 با به روزرسانیهایی از جمله پیشرفتهایی تو Zend Engine و کاهش در استفاده از حافظه منتشر شد.
PHP با عملکرد خوب، دقیقاً چیه؟
قبل از اینکه به افزایش سرعت سایت PHP بپردازیم، بهتره بهتون بگم که عملکرد و سرعت لزوماً مترادف نیستند. دست یابی به عملکرد مطلوب اغلب یه عمل متعادل کنندهست که نیاز به معامله بین سرعت، دقت و مقیاس پذیری داره. به عنوان مثال در حین ساختن یه برنامه وب ممکنه مجبور بشین بین نوشته اسکریپتی که همه چیز رو در حافظه جلوی خودش قرار میده یا اولویت بندی مقیاس پذیری با اسکریپتی که داده ها رو در چانکها بارگذاری میکنه، برای اینکه به بیشترین سرعت برسین، تصمیم بگیرین.
بر اساس باز نمایی از phplens تصویر زیر، سبک سنگین کردن بین سرعت و مقیاس پذیری رو نشون میده:
تفسیر نمودار
خط قرمز نشون دهنده اسکریپتی است که برای سرعت بهینه شده و خط آبی اسکریپتی است که برای مقیاس پذیری بهینه شده! وقتی تعداد اتصالات همزمان کم باشه، خط قرمز سریعتر اجرا میشه با این حال با افزایش تعداد کاربران، خط قرمز کندتر میشه و با افزایش ترافیک خط آبی! اما خب میزان کاهش اونقدرا هم چشمگیر نیست، بنابراین پس از یه آستانه خاص تنظیم سرعت اسکریپت آهستهتر از تنظیم مقیاس پذیری اسکریپت است.
این دوتا ورزشکار برای دوتا موقعیت متفاوت مناسب هستند، پس برای همینه که میگم اسکریپت ها تو سناریوهای مختلف بهتر عمل میکنن. انتخاب یه مورد مناسب برای برنامه شما هم نیاز به توجه دقیق کاربران رو داره، ممکنه لازم باشه اسکریپت ها رو به مرور زمان و با افزایش ترافیک تنظیم کنین.
زمان بهینه سازی سرعت سایت PHP چه موقع است؟
برای بهینه سازی سرعت سایت PHP برنامه نویسان باتجربه گاهی اوقات تنظیم دقیق کد php رو برای پایان چرخه پروژه تنظیم میکنن. با این حال یه همچین کاری فقط در صورتی پیشنهاد میشه که به پارامترهای عملکرد سایت php خودتون اطمینان دارین. و اما یه روش معقولتر انجام آزمایشات در طی مراحل توسعه است. در غیر اینصورت ممکنه خودتون صرف بازنویسی قسمتهای بزرگی از کد کنین تا عملکرد سایت شما به درستی انجام بشه.
قبل از شروع به کار کردن یه برنامه php استانداردها رو روی سخت افزار و نرم افزارتون اجرا کنین تا پارامترهای عملکردی خودتون رو تعیین کنین. این اطلاعات میتونه به برنامه نویسی شما کمک کنه. مطمئن بشین که از تست داده ها به اندازه کافی استفاده میکنین یا در غیر این صورت میتونین کدی رو ایجاد کنین که مقیاس پذیر نباشه.
تکنیکهایی برای افزایش سرعت سایت PHP
نوشتن یه کد خوب اولین قدم مهم برای بهبود سرعت سایت PHP است. اگه روشهای زیر رو به خوبی انجام بدین میتونین در پایان کار کمتر درگیر عیب یابی بشین! پس با من همراه باشین:
از عملکرد Native PHP استفاده کنین
بهتره از فانکشنهای Native PHP استفاده کنین، این طوری دیگه لازم نیست خودتون هی چندبار کد بزنین و وقتتون گرفته بشه و هم باعث میشه کار شما سریعتر پیش بره و هم اگه قراره برای یه فانکشن دیگه کد بزنین از همون نیتیو استفاده میکنین و کد جدیدتون بهینهتر میشه.
برای افزایش سرعت سایت PHP بجای XML از JSON استفاده کنین
باید بگم که استفاده از توابع PHP نیتیو مثل () JSON-encode و () JSON-decode که به طرز شگفت انگیزی سریع هستن، میتونن باعث بهبود عملکرد سایت PHP بشن و همینه که من استفاده از JSON رو به استفاده از XML ترجیح میدم.
اگه خیلی به XML متعهد و وفادارین پس بهتره اون رو با عبارات منظم به جای دستکاری DOM تجزیه کنین.
از تکنیکهای کش کردن بهره ببرین
Memcache مخصوصاً برای کاهش بار پایگاه داده شما مناسبه، موتورهای کش کردن مثل APC یا OPcache برای صرفه جویی زمان وقتی که اسکریپت ها اجرا میشن، عالین.
محاسبات غیر ضروری رو حذف کنین
هنگام استفاده مکرر از مقدار مشابه یه متغیر، یجای این که عمل محاسبه رو برای هر بار تکرار انجام بدین، اول مقدار اون متغیر رو محاسبه کنین تا سرعت کار زیاد بشه و بتونین باعث افزایش سرعت سایت PHP بشین.
از () isset استفاده کنین
در مقایسه با () Count, () Strlen و () Sizeof، تابع () isset یه روش سریعتر و راحتتری برای تعیین اینه که آیا Value از صفر بیشتره یا خیر! با استفاده از این تابع میتونین سرعت سایت PHP رو بهینه کنین.
حذف کلاسهای غیر ضروری برای افزایش سرعت سایت PHP
اگه قصد استفاده مکرر از کلاسها یا متدها رو ندارین، در واقع یعنی بهشون نیازی ندارین! اگر هم استفاده کردن از کلاس تو پروژهتون یه ضرورته بهتره از متدهای کلاس مشتق شده استفاده کنین چون که اونها سریعتر از متدهای کلاسهای پایه هستند.
اعلانهای اشکال زدایی رو خاموش کنین
هشدارهایی که توجه شما رو به خطاها جلب میکنه در طول برنامه نویسی مفید هستند اما فقط یه پروسه اضافهتر هستند که سرعت شما رو بعد از راه اندازی، کند میکنن! بهتره این اعلانها رو برای بهبود سرعت سایت PHP خاموش کنین!
اتصالات پایگاه داده رو ببندین
تغییر متغیرها و بستن اتصالات پایگاه داده در کد شما باعث صرفه جویی در حافظه گرانبها و در نتیجه بهبود سرعت سایت PHP میشه!
محدود کردن بازدیدهای پایگاه داده و افزایش سرعت سایت PHP
جمع کردن کوئری ها میتونه تعداد بازدید از پایگاه داده رو کاهش بده که این کار باعث اجرا شدن سریعتر همه چیز میشه!
از قویترین فانکشن str استفاده کنین
در حالی که str-replace از preg-replace سریعتره، عملکرد str-replace چهاربرابر سریعتر از str-replace است و استفاده از اون باعث بهبود عملکرد سایت PHP میشه.
از علامت نقل قول تکی استفاده کنین
هرجایی که تونسین از علامت نقل قول تکی استفاده کنین چون دوتا علامت نقل قول متغیرهای زیادی رو چک میکنه که میتونه باعث کند کردن عملکرد شما بشه.
=== این علامت رو امتحان کنین!
از اونجایی که === فقط یه محدوده بسته رو برسی میکنه سرعتش بیشتر از == برای مقایسه است.
اثر منفی Bottleneck ها روی افزایش سرعت سایت PHP
البته که کار کردن با اسکریپت ها میتونه سودمند باشه، با این حال یه سری مسائلی وجود داره که هیچ ربطی به کد نویسی نداره و همین امر میتونه مانع از عملکرد PHP بشه! بهخاطر همینه که توسعه دهندگان برای شناسایی و رسیدگی به این Bottleneck ها نیاز به درک کاملی از سیستمهای فرعی سرور خودشون دارن. من مناطقی که ممکنه مشکل از اونها باشه رو براتون آماده کردم:
شبکه
یکی از منابع بارزی که ممکنه مشکل Bottleneck از اونجا باشه، شبکه ها هستند! بسته به ظرفیت شبکه فعلی شما، ممکنه اون توانایی رسیدگی به میزان دادهای که بهش منتقل شده رو نداشته باشه و افت سرعت بشه!
CPU
انتقال صفحات ساده HTML تو یه شبکه، CPU شما رو تخلیه نمیکنه! اما برنامههای PHP این کار رو انجام میدن. بسته به درخواستهای خودتون، میتونین حداقل یه سرور با چندتا پردازنده داشته باشین که تا کد PHP شما رو به صورت کارآمدی پردازش کنه و باعث افزایش سرعت سایت PHP بشه.
حافظه مشترک
کمبود حافظه اشتراکی میتونه ارتباط میان فرآیندی Inter-Process رو مختل کنه و نتیجه این کار عقب ماندگی عملکرد میشه!!
Filesystem
فایل سیستم شما میتونه به مرور زمان قطعه قطعه بشه. یه فایل کش که از RAM استفاده میکنه میتونه سرعت دسترسی دیسک رو تا زمانی که حافظه کافی وجود داشته باشه افزایش بده.
مدیریت پروسه
باید مطمئن بشین که سرور شما با پروسههای غیرضروری سنگین نیست. پروتکلهای شبکه، اسکنرهای آنتی ویروس، سرورهای ایمیل و درایورهای سخت افزاری که استفاده نمیشن رو حذف کنین! همچنین اجرای Multi-threaded پی اچ پی میتونه زمان پاسخ بهتری داشته باشه.
سرورهای دیگر
اگه برنامه شما به سرورهای خارجی بستگی داره، Bottleneck یه سرور دیگه میتونه باعث کندی سرور شما هم باشه! در همچنین سناریویی میتونین از طرف خودتون یه سری تغییراتی انجام بدین تا کمبودهای طرف دیگه رو جبران کنه.
توصیههای تکمیلی برای افزایش سرعت سایت PHP
افزایش سرعت سایت PHP با استفاده از OPcache
از اونجایی که PHP موقتاً به کد اجرایی تعبیر میشه، برنامه نویسان مجبور نیستند هربار که تغییر کوچیکی انجام میدن بعدش کامپایل کنن. متاسفانه بارگیری مجدد کد یکسان در هر بار اجرا در وبسایت شما باعث کند شدن عملکرد میشه بخاطر همین هم استفاده از OPcache برای بهبود عملکرد سایت PHP توصیه میشه.
OPcache افزونهایه که کد کامپایل شده رو در حافظه ذخیره میکنه. بنابراین دفعه بعدی که کد اجرا یشه، PHP اندازه پروندهها و Timestamps رو چک میکنه تا ببینه آیا منبع فایل تغییر کرده یا نه و اگه تغییری نکرده بود، کد کش شده اجرا خواهد شد!
تصویر زیر تفاوت زمان اجرا و میزان استفاده از حافظه بین یه سایت PHP اجرا شده بدون کش، OPchache و eAccelator رو نشون میده:
افزایش سرعت سایت PHP با شناسایی تاخیرهای پایگاه داده
همانطور که در قسمت بالا گفته شد، مشکلات عملکردی همیشه بخاطر کد نیستند. بیشتر گرفتاریها وقتی اتفاق میافتن که برنامه شما باید به منابع دسترسی داشته باشه. از اونجایی که لایه دسترسی به داده های یه سایت PHP میتونه حداکثر 90 درصد از زمان اجرا رو به خودش اختصاص بده، یکی از اولین کارهایی که لازمه شما انجام بدین اینه که به همه مواردی که به پایگاه داده کد بیس شما دسترسی دارن یه نگاهی بندازین.
مطمئن بشین که log های آهسته SQL روشن شدن تا به شما در شناسایی و نشون دادن کوئری های Slow SQL و پرداختن به اونها برای ارزیابی کارآییشون کمک کنن.
یا اگه کوئریهای مشابهی پیدا کردین که چندین بار در طول یه اجرا ساخته شدن، میتونین تغییراتی ایجاد کنین که عملکرد سایت PHP شما رو با کاهش زمان دسترسی به پایگاه داده، ارتقا بده.
Filesystem خودتون رو تمیز کنین
فایل سیستم خودتون رو برای ناکارآمدیها یه چک کنین و مطمئن بشین که برای ذخیره سازی نشستها استفاده نمیشه.
برنامههای API خودتون رو کنترل کنین
اکثر برنامههای وب که به منابع خارجی بستگی دارن از API های از راه دور استفاده میکنن. درسته که API از راه دور از کنترل شما خارجاند ولی اقداماتی وجود داره که ما میتونین برای کاهش مشکلات ناشی از این شرایط انجام بدین.
مثلاً میتونین خروجی API رو ذخیره کنین و یا تماسهای API رو در پس زمینه برقرار کنین. برای درخواستهای API زمان معقولی رو تعیین کنین و در صورت امکان برای نمایش خروجی بدون پاسخ API هم اماده باشین!
PHP خودتون رو شکل بدین
استفاده از OPcache و مدیریت منابع خارجی شما باید کافی باشه تا بیشتر برنامهها به راحتی اجرا بشن. با این حال اگه درخواستهای خودتون رو افزایش میدین ممکنه وقتش رسیده باشه که پروفایل PHP خودتون رو بسازین، این کار ممکنه وقت گیر باشه ولی میتونه اطلاعات عمیقی رو در مورد عملکرد سایت در اختیارت بذاره.
اهمیت افزایش سرعت سایت PHP
سایت شما ممکنه یه لحظه خوب اجرا بشه ولی افزایش ناگهانی ترافیک باعث خرابی اون در صورت عدم آمادگی بشه! البته ایجاد تغییرات، همیشه به عوامل زیادی مثل زمان، هزینه و تلاش نیاز داره و اگه کار سختی هم باشه در عوض ارزشش رو داره و باعث بهبود عملکرد سایت PHP شما میشه.