السلام عليكم ورحمة الله
الحمد لله والصلاة والسلام على محمد رسول الله وعلى آله وصحبه ومن والاه
أما بعد :
درسنا اليوم بإذن الله سنتطرق فيه إلى عدة طرق لتسريع أداء سكريبتات PHP .
فمجموعة من المبرمجين لهم برمجيات جميلة جدا من ناحية التصميم وأيضا من ناحية البرمجة
تجد نسخهم مبرمجة بطريقة جميلة جدا وأيضا تصميم رائع
لكن المشكل تجده في أداء البرنامج . يكون ثقيل جدا في الإستعلام على النتائج وأيضا يستهلك كمية كبيرة من الباونديث لسيما إذا كانت إستضافة الموقع صغيرة . ويكون هذا هو عيب السكريبت
في هذا الدرس سنقوم بطرح مجموعة من الطرق لتسريع أداء البرنامج والتقليل من إستهلاك الباندويث
. إفراغ ذاكرة السيرفر من الإستعلامات .
بعد الانتهاء من الاستعلام لا بد من إفراغ الذاكرة من المساحة التي كان يحجزها الإستعلام .
وأيضا بعد إنهاء إستخدام متغيرلا بد من إفراغ الذاكرة من المساحة المستخدمة من هذا المتغير .
وذلك يكون بإستخدام الدالة
mysql_free_result() ;
يعني بعد الإنتهاء من الإستعلام تضع الدالة داخلها إسم المتغير الذي أسند إليه الإستعلام ويكون على الشكل التالي :
mysql_free_result($query) ;
وبإستعمال الدالة while تضع الدالة أسفل mysql_free_result أسفلها
مثال :
$query = mysql_query("SELECT * FROM tableName");
while ($row = mysql_fetch_assoc($query)) {
$out = $row;
}
mysql_free_result($query);
أما الدالة الخاصة بإفراغ الذاكرة من المتغيرات
unset($variable) ;
. نصائح برمجية
1-لو كنت تستطيع تعريف متغيرك كـ Static فإن ذلك اسرع من المتغير العادي.
2-استخدام echo اسرع من استخدام Print .
3-استخدام ‘ بدلا من “ يقلل بعضا من وقت تنفيذ البرنامج .
4-استخدم Full path العنوان الكامل عند استدعاء ملف require أو include فذلك يوفر وقت البرنامج في البحث و الوصول للعنوان .
5-حاول استخدام Str_replace قدر المستطاع بدل preg_replace فهي اسرع .
6-استخدام @ قبل الدالة لإلغاء الأخطاء يبطء من عمل البرنامج .
7-إغلق اتصالك بقاعدة البيانات عند الانتهاء .
8-استخدام علامتي التنصيص للوصول لحقل في المتسلسلة 7 مرات اسرع بدونها مثلا
$arr['name']
أسرع من
$arr[name]
9-استخدام require_once يؤثر بشكل كبير على أداء برنامج.
10-عند الرغبة في التحقق من طول النص فإن من الأفضل بدلا من استخدام strlen استخدام isset و ذلك
if(!isset($var{10})){
//هنا الشرط
}
11-إستخدام
++$i ; أسرع من $i++;
12-عند طباعة أكثر من متغير من الأفضل فصل المتغيرات أو النصوص بواسطة الفاصلة بدلا من استخدام النقطة .
echo $text2,$text2,$text3;
13-استخدم mod_gzip و هي ملحقة بالاباتشي يسرع من تحميل صفحتك بشكل كبير و ذلك باستخدام
. عمل كاش لجميع صيغ الملفات الموجودة في موقعك
ob_start("ob_gzhandler");
ضع هذا الكود في أعلا الصفحة
. الإبتعاد قدر الإمكان على النجمة * في الإستعلامات وكتابة الحقول التي تريد الإستعلام عنها يدويا .
مثال :
تجنب الطريقة التقليدية
$sql = mysql_query("select * from user ") ;
مكان النجمة أكتب الحقول التي تريد الإستعلام عنها
$sql = mysql_query("select userid,name,email,sex,country from user ") ;
. إستخدام limit .
ضروري وإجباري في جميع الإستعلامات تعمل limit في آخر الإستعلام
فمثلا عندنا في قاعدة البيانات 10000 موضوع ونحن نريد عرض آخر المواضيع
فضروري نحدد عدد المواضيع التي نريد الإستعلام عنها
ويكون ذلك بالشكل التالي :
$sql = mysql_query("select topicid,subject,message from topic limit 30 ") ;
أما إذا كان عندنا نظام تعدد الصفحات فالإستعلام سيصبح على الشكل التالي
$sql = mysql_query("select topicid,subject,message from topic limit 0,30 ") ;
. إستخدام Union .
لو اخذنا مثلا جملة sql لا تستعمل union
select name, level, address from student where level =1 or name='Youssef' ;
هذه الجملة تحضر لنا مثلا بيانات الطلبة (اسم الطالب ورتبته وعنوانه ) الذين يتوفر فيهم شرط أن مستواهم = 1 أو اسمهم = *Youssef*
لكن اداء هذه الجملة بطيئ في حال كان عدد البيانات في القاعدة كبير
لذلك جائت UNION لتوفر علينا الوقت والجهد لتعمل لنا الجملة السابقة كالاتي
select name, level, address from student where level =1 UNION select name, level, address from student where name='Youssef';
الكود سيكون طويل لكن سريع في الإستعلام
Union تعني أضف إستعلام ثاني للإستعلام الأول
. إستخدام الإنضمام Join .
مجموعة من المبرمجين يريدون جلب نتائج من مجموعة من الجداول وكل جدول يضعون له إستعلام خاص به
وهذا تبطئ أداء البرنامج لذلك جاء ما يسمى بالإنضمام في Mysql
بحيث تستعلم على أكثر من جدول في إستعلام واحد
وسنخصص مقال خاص بالإنضمام لأنه موضوع كبير جدا ، لا يتسع مقالنا هذا لشرح
أنا فقط أردت أن أنبه عليه
. الإعتماد في التصميم على css والتقليل من إستخدام الصور .
. عمل كاش لمفات الموقع .
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif "access 1 week" ExpiresByType image/jpg "access 1 week" ExpiresByType image/jpeg "access 1 week" ExpiresByType image/png "access 1 week" ExpiresByType text/css "access 1 week" ExpiresByType text/js "access 1 week" ExpiresByType application/x-shockwave-flash "access 1 week" ExpiresByType application/x-javascript "access 1 week" ExpiresByType js/js "access 1 week" </IfModule>
ExpiresByType : تعني الصيغة التي تريد عمل كاش لها
access 1 week : يعني الكاش ينتهي بعد أسبوع
أعني بالكاش أن جميع الصور وملفات css و js ... التي وضعتها في الكود
لأول مرة سيتم دخول الزائر للموقع سيتم تحميلها إلى جهازه الشخصي ( الكمبيوتر ) ، وسيتم جلبها من الجهاز بدل جلبها من السيرفر
سعني سيتم الإستعلام عنها من الموقع لأول مرة يدخل فيه الزائر الموقع
. منع إستغلال صور موقعك في موقع آخر .
وذلك بإضافة هذا الكود في ملف htaccess
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?dev-arb.com(/)?.*$ [NC]
RewriteRule .(gif|GIF|jpg|JPG|png|PNG|bmp|BMP)$ http://www.dev-arb.com/img/welcom.png [L,NC]
مع تغيير رابط موقعك ب dev-arb.com
و هذه (gif|GIF|jpg|JPG|png|PNG|bmp|BMP) هي الصور التي يتم منع ظهورها في موقع آخر
وعند إستعمال صورة من موقعك في موقع آخر سيتم إستبدالها بهذه الصورة http://www.dev-arb.com/img/welcom.png
أي سؤال لا تتردد في طرح
وإلى هنا السلام عليكم ورحمة الله تعالى وبركاته
كان معكم أخوكم في الله يوسف شهيري


إرسال تعليق