PDA

View Full Version : نکته هایی برای افزایش سرعت کد های php



hsgpro
جمعه 23 آبان 1393, 16:21 عصر
به نام خدا

سلام دوستان
من نکته هایی برای افزایش سرعت اجرای کد های php ار منابع مختلف یاد گرفتم و استفاده کردم گفتم اینجا برای دوستان هم آموزش بدم.


۱.فقط در مواقع الزامی تابع (Function) های دلخواه ایجاد کنید.
ایجاد تابع های دلخواه برای کار های ساده ای که میشه با تابع های پیش فرض php انجام داد یا حداقل وقتی کد زیادی هم نمیگیره باعث کاهش سرعت اجرای کد php میشه.پس اگه کارتون با توابع پیش فرض php هم راه میافته به سمت ایجاد تابع جدید نرید.

۲.اگر به نقل قول دو تایی ("متن") نیاز نیست از نقل قول تکی ('متن') استفاده کنید.
علامت نقل قول دو تایی یا " دو تفاوت بزرگی که با علامت نقل قول تکی ' دارد این است که کاراکتر های ویژه ای مثل خط جدید (New Line) رو میشه با کاراکتر رها ساز \ در نقل قول دو تایی ایجاد کرد و مقدار داخل متغیر ها را با نام خود متغیر جایگزین کرد.اگر متن شما باید حاوی مقدار متغیری باشد بهترین و سریع ترین گزینه نقل قول دو تایی " است اما اگه متن شما فقط متنی ساده است و نه به متغیر و نه به کاراکتر های ویژه نیاز ندارید نقل قول تکی ' این بار سریعتر است.

۳.در شرط های برابری از === به جای == استفاده کنید.
طبق منابع که در پایین لینکش رو گذاشتم استفاده از سه مساوی === به جای دو مساوی == پردازش کمتری رو تحمل میکنه و در نتیجه سرعت بیشتری داره.

۴.از دستور echo به جای print استفاده کنید.
کلاً چندین منبع خارجی تایید کردن که سرعت عمل دستور echo بیشتر از دستور print است به همین دلیل در اکثر پروژه های بزرگ php مثل سیستم وردپرس هم از دستور echo به جای print استفاده می شود.

۵.برای جایگزینی متون از تابع strtr به جای توابع str_replace یا preg_replace استفاده کنید.
طبق گفته منابع که در آخر تاپیک لینک گذاشتم تابع strtr برای جایگزینی متون سرعت بیشتری نسبت به تابع str_replace یا preg_replace دارد.راهنمای استفاده اش هم در این لینک http://php.net/manual/en/function.strtr.php هست.

۶.از فراخوانی تابع به عنوان حداقل یا حداکثر حلقه ها بپرهیزید.
فکر کنید مثلاً می خواین یه حلقه for بر اساس تعداد آیتم های موجود در یک آرایه (Array) اجرا کنید.به نظر شما وقتی می تونیم تعداد آیتم های آرایه مورد نظرمون رو یک بار در یک متغیر ذخیره کنیم چرا باید در هر بار اجرای حلقه تعداد آیتم های آرایه محاسبه بشه؟

مثلاً:


for( $i=0; i< count($arrA); $i++){
echo count($arrA);
}

در صورتی که میشه تعداد آیتم های آرایه رو به جای قرار دادن تابع count در مقدار حداکثر حلقه در یک متغیر قرار بدید و از کلی بار پردازشی بیهوده جلوگیری کنید مثل:


$len = count($arrA);
for( $i=0; i< $len; $i++){
echo $len;
}

۷.از switch case به جای شرط های تو در تو استفاده کنید.
مطمئن اگر با switch case آشنا باشید می دونید که در شرط های بسته به یک مقدار خیلی بهتر از if و else کار میکنه سرعتش هم که بیشتره.

۸.تا حد امکان از اخطار یابی توابع با قرار دادن حرف @ در اول نام تابع جلوگیری کنید.
شاید ندونید (منم خودم زیاد نمی دونم:لبخند:) ولی ظاهراً قرار دادن حرف @ در اول هر تابع امکان خطایابی تابع رو میده اما این کار خیلی باعث کاهش سرعت میشه و اگه نیاز نیست انجام ندیم بهتره.

۹.ارتباط خود با دیتابیس را پس از اتمام کار با دیتابیس قطع کنید.
در زبان php تو مسائل ساده ای مثل ارتباط با دیتابیس خالی کردن Ram دست خود ماست.اگه کارتون با دیتابیس تموم شده حتماً کانکشنش رو ببندید تا Ram استفاده شده آن خالی بشه برای بستن کانکشن دیتابیس هم اگه از mysqli استفاده میکنید می تونید از تابع mysqli_close استفاده کنید.

۱۰.تا حد امکان از حلقه foreach به جای for و while استفاده کنید.
اینم مثل echo دیگه اکثر منابع انگلیسی گفتن که سرعت اجرای حلقه های foreach بیشتر از حلقه های for و while است.

۱۱.از require و include به جای require_once و include_once استفاده کنید.
فکر کنم این موضوع از نام توابع هم معلوم باشه مسلماً فراخوانی کامل فایل ها با require یا include سرعت بیشتری نسبت به فراخوانی هر بار هر بار require_once و include_once داره.

۱۲.اگر در دیتابیس با یک ستون خاص از یک سطر کار دارید کل سطر رو با * SELECT فراخوانی نکنید.
مثلاً اگه شما فقط می خواین ببینید که ایمیل یه یوزر در دیتابیس با ایمیلی که در برنامه گرفتید یکسان هست یا نه بهتره فقط ستون مربوط به ایمیل رو SELECT کنید به جای SELECT کردن کل اطلاعات کاربر از دیتابیس.مسلماً وقتی می خواین فقط ایمیل رو بررسی کنید به اطلاعاتی دیگه ای مثل رمز عبور کاربر نیاز ندارید.

۱۳.از isset برای چک کردن وجود یک متغیر به جای 0 < یا '' ==! استفاده کنید.
تابع isset که از توابع پیش فرض php است سرعت بیشتری برای بررسی مقدار داشتن یک متغیر نسبت به شرط هایی مثل 0 < یا '' ==! داره.

۱۴.از آدرس دایرکتوری کامل فایل ها برای کار هایی مثل include و require کردن استفاده کنید.
طبق گفته منابع استفاده از آدرس دایرکتوری کامل فایل سریع تر از نوشتن مثلاً نام فایلی که هم دایرکتوری فایل فعلی است می باشد.مثلاً شما می خواین فایل test.php که در کنار فایل فعلی تون است include کنید به جای اینکه فقط بنویسید include test.php بهتره که آدرس کامل فایل مثلاً /home/username/test.ir/public_html/test.php رو بدید.البته این آدرس فقط یه مثاله آدرس دایرکتوری های هاست خودتون رو می تونید با کد زیر بدست بیارید:


echo $_SERVER['DOCUMENT_ROOT'];

۱۵.متغیر های بلااستفاده را با دستور unset برای خالی کردن Ram حذف کنید.
با این که این کار در افزایش سرعت سایت تاثیری نداره اما برای بهینه بودن اسکریپت php شما خیلی تاثیر داره.مسلماً بزرگترین عیبی که میشه به اسکریپت های بزرگ php مثل وردپرس گرفت استفاده بیش از حد از Ram و CPU سرور است اگر با متغیری کاری انجام دادید و دیگه کاریش ندارید با دستور unset حذفش کنید تا حافظه اشغال شده آن در Ram هم حذف بشه.

منابع:

http://www.mdproductions.ca/?p=3875 (http://barnamenevis.org/view-source:http://www.mdproductions.ca/?p=3875)
http://www.thegeekstuff.com/?p=15637
(http://www.thegeekstuff.com/?p=15637)

من همین ها رو از لینک های بالا و کتاب "افزایش سرعت و بازدهی برنامه های php" (http://yon.ir/hW1Y) متوجه شدم اگر شما توصیه های دیگه ای برای افزایش سرعت و کارایی کد های php می دونید بگید.
این مطلب به صورت کاملاً اختصاصی توسط بنده در این تاپیک نوشته و از هیچ جا کپی نشده است.
منبع نسخه فارسی: انجمن برنامه نویس http://barnamenevis.org

kabootar_y
یک شنبه 08 شهریور 1394, 16:00 عصر
۱.فقط در مواقع الزامی تابع (Function) های دلخواه ایجاد کنید.
ایجاد تابع های دلخواه برای کار های ساده ای که میشه با تابع های پیش فرض php انجام داد یا حداقل وقتی کد زیادی هم نمیگیره باعث کاهش سرعت اجرای کد php میشه.پس اگه کارتون با توابع پیش فرض php هم راه میافته به سمت ایجاد تابع جدید نرید.

دوست عزیز من این یک مورد رو خونده بودم که تا میتونید برای کارهای مختلف تابع های جدید بسازید و این طوری سرعتش بیشتره. مثلا اگر قرار باشه یک متنی رو ده بار در طول برنامه به آرایه تبدیل کنیم و بعد از عملیاتی دوباره به متن تبدیل کنیم که هر ده بار یک عمل روی متن انجام میشه چرا مثلا 15 خط تابع ننویسیم که این 15 خط رو ده مرتبه در طول برنامه تکرار کنیم؟

MohammadReza1994
دوشنبه 09 شهریور 1394, 12:12 عصر
دوست عزیز من این یک مورد رو خونده بودم که تا میتونید برای کارهای مختلف تابع های جدید بسازید و این طوری سرعتش بیشتره. مثلا اگر قرار باشه یک متنی رو ده بار در طول برنامه به آرایه تبدیل کنیم و بعد از عملیاتی دوباره به متن تبدیل کنیم که هر ده بار یک عمل روی متن انجام میشه چرا مثلا 15 خط تابع ننویسیم که این 15 خط رو ده مرتبه در طول برنامه تکرار کنیم؟

منظور این دوستمون اینکه وقتی تابع پیش فرض strpos هست دیگه خود ما یه تابع جدید که کار strpos انجام میده ننویسیم