PDA

View Full Version : PHP Performance (افزایش سرعت و بازدهی)



Keramatifar
پنج شنبه 31 اردیبهشت 1394, 00:25 صبح
درود
یکی از مباحثی که موقع برنامه نویسی زیاد بهش توجه نمیشه، Performance است
امان از localhost :چشمک:
در این تاپیک مباحث مرتبط با PHP Performance و بصورت کلی سرعت و بازدهی وب سایت رو آموزش خواهم داد.

Keramatifar
پنج شنبه 31 اردیبهشت 1394, 03:57 صبح
درس اول:
مقایسه حلقه For و Foreach در PHP
در برنامه نویسی Collection به هر نوع موجودیتی که حاوی بیش از یک key = value است گفته می شود
مانند Array, List, Enum, ...

همیشه وقتی با Collection ها سر و کار داریم باید از foreach به جای سایر حلقه ها استفاده کنیم، Foreach نوعی از LOOP (حلقه) ها در PHP و سایر زبان های خانواده C است که مخصوص کار با این نوع از داده های است.

به این مثال دقت کنید
صورت مسئله:
می خواهیم سرعت حلقه For و حلقه Foreach را در شرایط یکسان بررسی کنیم


<?php
$elements = array();

////
// An array of 10,000 elements with random string values
////
for($i = 0; $i < 10000; $i++) {
$elements[] = (string)rand(10000000, 99999999);
}

$time_start = microtime(true);

////
// for test
////
for($i = 0; $i < count($elements); $i++) { }

$time_end = microtime(true);
$for_time = $time_end - $time_start;

$time_start = microtime(true);

////
// foreach test
////
foreach($elements as $element) { }

$time_end = microtime(true);
$foreach_time = $time_end - $time_start;

echo "For took: " . number_format($for_time * 1000, 3) . "ms\n";
echo "Foreach took: " . number_format($foreach_time * 1000, 3) . "ms\n";
?>

تشریح کد بالا:


با استفاده از تابع rand در PHP یک آرایه شامل 10 هزار عضو ایجاد می کنیم
با استفاده از تابع microtime تایم شروع عملیات را در یک متغیر ذخیره می کنیم
با استفاده از حلقه For یکبار روی اعضای آرایه می چرخیم
حالا مچددا با استفاده از میکروتایم زمان پایان رو ذخیره کرده و تفاوت آن با زمان شروع را بدست می آوریم
همین مراحل را طی کرده و اینبار از حلقه Foreach استفاده می کنیم و تفاوت این دو را روی صفحه خروجی می دهیم
با اجرای این کد روی لپ تاپ من اعداد زیر بدست آمد

For took: 16.137ms
Foreach took: 0.324ms
نتیجه گیری:
متوجه عمق فاجعه شدید؟
طبق خروجی این مثال
حلقه Foreach بیش از 49 برابر (دقیقا 49.805) سریعتر از حلقه For عمل کرده است

golbafan
پنج شنبه 31 اردیبهشت 1394, 12:15 عصر
کتاب خوبی نوشتید مهندس...
مثالهای خوبی هم داره

منتظر چاپ دوم هستم با مثالهای بهتر

Keramatifar
سه شنبه 12 خرداد 1394, 02:02 صبح
کتاب خوبی نوشتید مهندس...
مثالهای خوبی هم داره

منتظر چاپ دوم هستم با مثالهای بهتر
کتابی که دوستمون اشاره فرمودند:
افزایش سرعت و بازدهی در PHP (http://keramatifar.com/books.php?type=keramatifar_press)



131878




نویسنده : مهندس محمد کرامتی فر
نسخه : نگارش اول
تعداد صفحه : 240
انتشارات: پندار پارس
شابک : ٩-٥٠-٦٥٢٩-٦٠٠-٩٧٨
تعداد دانلود : 0
تعداد بازدید : 15300
تاریخ : بهار ١٣٩٣



دانلود: فهرست و بخشی از این کتاب (http://www.barnamenevis.pro/books/php-performance.pdf)

در ضمن برای علاقه مندان به این مبحث، بنده کلاسی رو هم در آموزشگاه برنامه نویس (http://www.barnamenevis.pro) برگزار می کنم با عنوان:



دوره آموزشی افزایش سرعت و بازدهی سایت های PHP (http://www.barnamenevis.pro/academy/course/php_performance/%D8%AF%D9%88%D8%B1%D9%87%20%D8%A2%D9%85%D9%88%D8%B 2%D8%B4%DB%8C%20%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D8% B4%20%D8%B3%D8%B1%D8%B9%D8%AA%20%D9%88%20%D8%A8%D8 %A7%D8%B2%D8%AF%D9%87%DB%8C%20%D8%B3%D8%A7%DB%8C%D 8%AA%20%D9%87%D8%A7%DB%8C%20PHP)


البته یه پارتی بازی هم داریم :چشمک:
اعضای سایت برنامه نویس به ارسال نام کاربری به ایمیل academy@barnamenevis.email

با 25% تخفیف معادل مبلغ 100.000 تومان ثبت نام می شوند
علاوه بر اون یک نسخه از این کتاب هم قبل از شروع دوره بصورت هدیه و رایگان از طریق پست براتون ارسال میشه