بهینهسازی عملکرد برنامههای PHP
۷ خرداد ۱۴۰۰
عملکرد برنامههای PHP فقط یک مسئلهی فنی نیست و شما بهعنوان برنامهنویسانی که در حال خلق ارزش برای کسبوکارها هستید باید بدانید عملکرد برنامه میتواند دلیل موفقیت یا عدم موفقیت یک کسبوکار باشد بنابراین چند میلی ثانیه موضوع بسیار مهمی است.
چرا عملکرد مهم است؟
بهطور عمده سه دلیل ضروری برای مورد توجه قرار دادن موضوع عملکرد برنامه وجود دارد:
- تجربهی کاربری
- تبدیل
- مقیاسپذیری
تجربهی کاربری اولین مورد لیست ما است. اگر زمان مورد نیاز برای بارگیری برنامهی شما طولانی باشد بنابراین یک کسبوکار در معرض خطر قرار گرفته و این امکان بهوجود میآید که کاربران برنامه به سمت رقیبان سوق پیدا کنند یا نظرهای بدی را با دیگر افراد بهاشتراک بگذارند که هر دوی اینها تاثیرهای بد و نامناسبی بر رشد کسبوکار میگذارد.
مورد بعدی لیست ما، تبدیل است. تبدیل به این معناست که کاربران به مشتریان واقعی تبدیل میشوند یعنی محصولی را خریداری یا کتاب الکترونیکی شما را دانلود میکنند. بنابراین وبسایت سریعتر به معنای تبدیل بیشتر است و درنهایت منجر به سود بیشتر میشود.
سومین و آخرین مورد لیست ما مقیاسپذیری است. هرچقدر برنامهی شما عملکرد بهتری داشته باشد درنهایت میتواند از پس بازدیدهای بیشتری بربیاید. برای مثال اگر برنامهی شما قادر باشد یک فرایند را در ۱۰۰ میلیثانیه انجام دهد به این معنی است که برنامهی شما میتواند ۱۰ درخواست را در ۱ ثانیه پردازش کند و اگر زمان مورد نیاز برای پردازش هر درخواست به نصف کاهش پیدا کند، ظرفیت برنامهی شما دو برابر میشود.
بررسی تاثیر عملکرد
در این بخش میخواهیم تاثیر عملکرد بر رشد یا عدم رشد برخی نرمافزارهای نام آشنا را بررسی کنیم. اولین برنامهی مورد بحث ما مرورگر Firefox است که با کاهش ۲.۲ ثانیهای زمان بارگیری صفحههای وب توانست رشد ۱۰ میلیون دانلود را تجربه کند.
Shopzilla با ۵ ثانیه سریعتر شدن توانست افزایش نرخ تبدیل ۷ الی ۱۲ درصدی را تجربه کند. البته بررسی موفقیتها نمیتواند دیدگاه صحیحی به شما بدهد به همین دلیل میخواهیم بهسراغ موتور جستجوی Bing برویم که با ۱ ثانیه کندتر شدن ۲.۸ درصد از درآمد خود را از دست داد. در همین راستا Yahoo با ۰.۴ ثانیه کندتر شدن تجربهی ۵ الی ۹ درصدی کاهش بازدید را تجربه کرد.
بنابراین با بررسیهای فوق و بدون درنظر گرفتن نوع کاربری برنامه، افزایش سرعت و عملکرد میتواند باعث رشد کسبوکارها شود.
راهکارهایی برای بهینهسازی عملکرد برنامههای PHP
با تمام صحبتهای بالا باید به اهمیت عملکرد برنامه پی برده باشید اما مسئلهی اصلی چگونگی بهینهسازی عملکرد برنامههای PHP است.
انتخاب نسخهای مناسب از PHP
تفاوت عملکرد میان نسخههای قدیمی و جدید PHP با انتشار PHP 7 بسیار مشهود شد. البته در این بخش شاهد مقایسه میان نسخههای مختلف PHP نخواهیم بود اما نمودار زیر میتواند در درک این موضوع به شما کمک کند.
اجرای بهینهسازیهای کوچک
بهینهسازیهای کوچک با تغییرهای جزئی در کدهای شما بهوجود میآیند تا درنهایت عملکرد برنامهی شما بهبود پیدا کند. برای مثال اگر میخواهید آرایهای را پیمایش کنید و تصمیم شما برای انجام این کار، انتخاب حلقهی for است میتوانید با محاسبهی طول آرایه قبل از حلقهی for، عملکرد برنامه را بهبود ببخشید. بیایید نگاهی به تصویر زیر داشته باشیم تا اختلافهای بهوجود آمده در عملکرد برنامه را متوجه شوید.
شما میتوانید در رابطه با بهینهسازیهای کوچک در سایت phpbench.com اطلاعات بیشتری کسب کنید.
XHProf
پس از انجام بهینهسازیهای کوچک اگر باز هم عملکرد برنامهی شما کند بود باید بهسراغ ابزار XHProf بروید که از آن برای Profiling در زبان PHP استفاده میشود. پس از نصب و پیکربندی XHProf در سرور خود میتوانید ببینید که این ابزار در Header برنامه اضافه میشود و گزارشی از تمام فانکشنهای برنامه در Footer مشاهده خواهید کرد. تصویر زیر نتیجهی profiling صفحهی محصولات در برنامهای است که با فریمورک Laravel توسعه داده شده و از فانکشن getProductData
برای دریافت اطلاعات محصولات استفاده شده است. این فانکشن ۴۰ بار اجرا شده و کل زمان اجرا ۵ ثانیه بوده است.
در نگاه اول میتوانید انتظار مشکل N +1 را داشته باشید و اگر آن را برطرف کنید میتوانید سرعت برنامهی خود را بهمدت ۵ ثانیه افزایش دهید. مشکلهای N+1 زمانی رخ میدهد که شما یک کوئری برای دریافت دادهها به دو جدول از یک دیتابیس رابطهای ارسال میکنید.
بهعنوان مثال شما یک کوئری برای دریافت نام و شناسه همهی محصولها به دیتابیس برنامه ارسال میکنید اما برای دریافت جزئیات دیگری مانند رنگها یا موجودی هر محصول باید مجددا به جدولهای دیگری کوئری بزنید.
حال برای رفع مشکلهای N + 1 فقط نیاز است تا کوئریهای خود را تصحیح و بازنویسی کنید.
Caching
اجرای Caching با ابزارهای موجود مانند Redis یا Memcached میتواند در بهینهسازی بارگیری اطلاعات از دیتابیس برنامهی بسیار تاثیرگذار باشد و زمان بازیابی اطلاعات را کاهش میدهد. البته ابزار Redis دارای مزایای رقابتی مانند همگامسازی دادهها با دیسک است بنابراین دادههای شما هنگام reboot کردن سرور از بین نمیرود یا برای مثال با وجود قابلیت master/slave replication میتوانید با رشد برنامهی خود، clusterها را بهراحتی افزایش دهید.
منبع: https://codeburst.io/php-performance-optimization-992acaa78817