صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 24

الموضوع: [مقال] 34 نصيحة لأكواد سريعة

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512

    [مقال] 34 نصيحة لأكواد سريعة



    بسـم الله الرحمــن الرحــيم.




    يتناول هذا المقال ما يلي
    :
    = ملحوظات قبل البدء.
    = مقدمة.
    = التعامل مع النصوص.
    = قاعدة البيانات و الملفات والمقابس.
    = المتغيرات والدوال.
    = نصائح عامة.
    = الكائنات ومحتوياتها.
    = الخاتمة.



    = ملحوظات قبل البدء:
    * يفضل عمل -إن لم يكن موجودا- مجلد على الجهاز ونضع فيه المعلومات التي تلفت نظرنا حتى يكون مرجعا نبحث فيه قبل الرجوع إلى الويب.
    * ما يلي هو جزء من كل ونقاط من بحر كلما تعمقت وقرأت فيه ستجد أنك تضيف إلى معلوماتك في كل مرة.. لذلك حاول القراءة و البحث أكثر.



    = مقدمة:
    تم إعداد هذه النصائح أو ال tips بهدف تصحيح بعض الأوضاع .. لكن تجب القراءة والتوسع أكثر
    لأن هناك أخطاء كثيرة قد تحتوي عليها أكوادنا ونحن ربما لا نعرف بها .. أو حتى أننا نعتبرها مميزات للكود كما سنرى..



    = التعامل مع النصوص:

    1- عند طباعة النص ب echo استعمل البارامترات المتعددة عوضا عن لصق النص بالنقطة "." حيث أنها دالة تقبل عدة مدخلات من النصوص.
    كود PHP:
    $name 'Mohamed';
    // بدلا من
    echo 'My name is '.$name;
    // استخدم
    echo 'My name is ',$name


    2-
    استخدام echo بدلا من print، حيث أن الأخيرة تتأخر لإرجاعها نتيجة هل تمت طباعة الكود أم لا.. وهذه النتيجة لا نحتاجها.

    3- استخدام strpos و strbrk و strncasecmp بدلا من التعبيرات القياسية كلما أمكن.
    كود PHP:
    // بدلا من
    if(preg_match('/something/',$text);
    // استخدم
    if(strpos($text,'something') !== false); 


    4-
    عند استبدال نص ولا تحتاج تعبيرات قياسية يكون استخدام strtr أسرع بأربع مرات من str_replace

    5- إذا كنت تستخدم دالة لاستبدال النصوص مثل str_replace تقبل مدخلات عبارة عن مصفوفة أو نص عادي وكنت لا تريد البحث عن مدخلات كثيرة
    فالأفضل تكرارها عدة مرات بعدد مدخلات البحث على أن تدخل لها مصفوفة.

    6- استعمال علامة التنصيص المفردة ' بدلا من المزدوجة " وهذا عندما لا تحتاج لوضع متغيرات داخل هذا النص.

    7- عند الحاجة للتحقق من طول النص استخدم isset بدلا من strlen
    كود PHP:
    if (strlen($var) < 3) { /*Do something */ }
    // استبدلها ب
    if (!isset($var{3})) { /*Do something */ 
    8- دالة printf بطيئة جدا مقارنة ب echo و print حيث أنها تبحث داخل النص عن الرموز الخاصة بها وإذا وجدته تتعامل معه.
    و غالبا انك في PHP لن تحتاج لما تقدمه هذه الدالة أيضا..

    9- دائما استعمل gzip في ضغط المخرجات حيث انه يقلل حجمها بشكل يصل إلى 80%

    10- حاول جعل ال HTML في صفحات مستقلة عن البرمجة PHP حيث أن تعامل الاباتشي مع صفحات ال PHP أبطأ ب 2-10 مرات من صفحات HTML




    = قاعدة البيانات و الملفات والمقابس:

    11- استعمال المسارات الكاملة للملفات full paths لمنع إهدار الوقت في ترجمتها من قبل النظام.
    كود PHP:
    // تعريف المسار الرئيسي للصفحات بوضع قيمته داخل متغير أو ثابت
    define('ABSPATH',dirname(__FILE__).'/');
    // ثم استخدامه عند الحاجة
    include(ABSPATH.'path/to/file'); 


    12-
    إغلاق المقابض المفتوحة لاتصالات قاعدة البيانات و الملفات وغيرها بعد الانتهاء من استخدامها مباشرة

    13- حدد فقط الحقول التي تحتاجها عند عمل استعلام من قاعدة البيانات ولا تستعلم عن جميع الحقول.
    كود PHP:
    // بدلا من
    $stmt 'SELECT * FROM table';
    // استعمل
    $stmt 'SELECT field1 FROM table'
    14- استعمل التعليمات المجهزة مع الداتابيس prepared statements وهنا شرح لعمل ذلك باستعمال مكتبة PDO.



    = المتغيرات والدوال:

    15- دائما استخدم unset لحذف المتغيرات عند الانتهاء من استخدامها وخاصة مع المتغيرات و المصفوفات الكبيرة

    16-
    كود PHP:
    $row['something']
    // أسرع بسبع مرات من
    $row[something]; 


    17-
    زيادة متغير غير معرف أبطأ من 9 إلى 10 مرات من المتغير المعرف مسبقا.
    كود PHP:
    // لا تستعمل ما يلي مباشرة
    $i++;
    // بل يجب تعريفه أولا
    $i 0;
    $i++; 


    18-
    تعريف دالة لها بارامتر واحد ولا توجد أوامر في جسمها تعادل وقت زيادة متغير عادي بسبع إلى ثماني مرات
    كود PHP:
    // تعريف دالة بأبسط أشكالها هكذا:
    function foo($arg1);
    // تساوي الوقت اللازم لزيادة متغير بالصورة التالية سبع مرات
    $var++; 


    19-
    زيادة متغير global أبطأ بمرتين من زيادة متغير داخلي في الدالة مثلا.
    كود PHP:
    // زيادة متغير بهذه الصورة
    function foo(){
        global 
    $var;
        
        
    $var++;
    }
    // أبطأ بمرتين من هذه
    function foo(){
        
    //$var = 0;
        
    $var++;



    = نصائح عامة:

    20- استخدام $_SERVER['REQUEST_TIME'] بدلا من time() إذا كنت تريد معرفة وقت بدء تنفيذ الصفحة و لأغراض الاستعلام وعرض التواريخ
    حيث أن تاريخ تنفيذ الصفحة يكون معرف مسبقا.. أما time() هي دالة تكونه في كل مرة.
    كود PHP:
    $tstamp $_SERVER['REQUEST_TIME'];
    // أسرع من
    $tstamp time(); 


    21-
    استخدام الدوال البادئة ب ctype_ للتحقق من نوع المدخلات .. بدلا من التعبيرات القياسية.
    كود PHP:
    // بدلا من
    if(preg_match('/^[0-9]+$/',$_GET['id'])) /*Do something*/;
    // استعمل
    if(ctype_digit($_GET['id'])) /*Do something*/


    22-
    استخدام @ قبل الدالة بغرض إخفاء الخطأ الناتج عنها يبطئ عملها كثيرا.

    23- إذا كنت تستعمل if و else if كثيرة فيمكنك التفكير في استعمال switch لأنها أسرع.

    24- لا تستخدم دوال بداخل حلقة تكرار for و استخدمها خارجا .. مثل count
    كود PHP:
    // بدلا من
    for($i=0;$i<count($var);$i++);
    // استخدم
    $count count($var);
    for(
    $i=0;$i<$count;$i++); 


    25-
    استخدام foreach أسرع من for في اغلب الأحيان

    26- استخدام أدوات اختبار الأداء profilers لمعرفة تفاصيل تدفق الكود و إحصائيات و أزمنة تنفيذ كل جزء منه.

    27- هذا ينطبق على PHP فقط:
    كود PHP:
    ++$i;
    // أسرع من:
    $i++; 


    = الكائنات ومحتوياتها

    28- عندما يكون عندك مصفوفة أخرجها و استعملها كمصفوفة ولا تحولها ل object .

    29- عدم المبالغة في شق ال methods في الكلاس وتعديدها .. ضم ما يمكن ضمه داخل دالة واحدة.

    30- تعريف دالة method داخل صنف يساوي وقت عمل $var++ يتم تكرارها 15 مرة! -لاحظ أن هذا وجسم الدالة فارغ لا توجد به أوامر.
    كود PHP:
    // class A{
        
    function foo($var);
    // }
    // تعادل تكرار العملية التالية ل 15 مرة
    $var++; 
    31- زيادة متغير في كلاس أبطأ بثلاث مرات من زيادة متغير داخلي
    كود PHP:
    class A{
        
        var 
    $var 0;

        function 
    foo(){
            
    // هذه العملية
            
    $this->var++;
            
    // أبطا مما يلي بثلاث مرات
            // $var = 0;
            
    $var++;
        }



    32-
    طلب دالة static أسرع 4 مرات من طلبها داخل object.
    كود PHP:
    class A{
        
        public static function 
    $foo_static(){
            
    // echo 'hello';
        
    }

        public function 
    $foo_obj(){
            
    // echo 'hello';
        
    }
    }
    A::foo_static();
    // أسرع باربع مرات من
    // $obj = new A();
    $obj->foo_obj(); 


    33-
    تجنب الطرق السحرية magic methods قدر الإمكان
    كود:
    __construct
    __destruct
    __call
    __callStatic
    __get
    __set
    __isset
    __unset
    __sleep
    __wakeup
    __toString
    __invoke
    __set_state
    __clone
    34- لا يجب ان تجعل كل شيء OOP نظرا لضغطها وزيادة وقت تنفيذها -يعني كل شيء بقدر، ولا تسرف في الاستخدام



    = الخاتمة:
    بخصوص المقالات القادمة بإذن الله.. كنت انوي جعلها للوصول للمستوى المتوسط في السكيوريتي الخاص بأكوادPHP
    لكن، ومع اصطدامي بالواقع الذي عليه بعض المبرمجين، من سطحية الادراك لأجزاء شائكة مثل اختصار الأكواد
    فـ قد نعمل فيها دورة تصل بنا إلى ما قبل المستوى المتوسط .. لكي نكمل من حيث انتهى الآخرين..

    هذا ما لدي الآن فإن أخطأت فمن نفسي ومن الشيطان .. وان أصبت فبتوفيق من الله.
    أرحب بأي أسئلة أو استفسارات أو نقاشـات بناءة .. ولا تنسوا دعوة لأخيكم بظهر الغيب.





    التعديل الأخير تم بواسطة mr_m ; 18-04-2009 الساعة 04:49 PM
    __________________
    محمد حمود.


  2. #2
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    42


    السلام عليكم ورحمه الله وبركاته
    جزاك الله الف خير على موضوعك وكنت اريد ان انوه على نقطه معينه وهى الاختلاف بين كل من
    كود PHP:
    //$i++ and ++$i 
    حيث انها فى الحالة الاولي
    تقوم بارجاع نتيجه المتغير ثم من بعد ذلك اضافه قيمه 1 وعليه

    اما فى الحالة الثانية
    تقوم بارجاع النتجه باضافه واحد للمتغير قبل عمليه استدعاء له
    وبالتالى تكون هناك اختلاف فى النتيجه فى حاله طباعه المتغير بشكل مباشر
    مثال على ذلك

    كود PHP:
    <?
    $i 
    3;
    echo 
    $i++;
    echo 
    $i;
    echo 
    "<br>";
    $i 3;
    echo ++
    $i;
    echo 
    $i;
    ?>






    __________________
    "لا تزولُ قَدَمَا عَبْدٍ يومَ القيامةِ حتى يُسألَ عنْ أربع ٍ عنْ عُمُرِهِ فيما أفناهُ وعنْ جسدِه فيما أبْلاهُ وعنْ مالهِ مِنْ أيْنَ أخذهُ وفيما أنْفَقَهُ وعنْ عِلمِهِ ماذا عَمِلَ بهِ".

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2005
    المشاركات
    400


    شكرا لك على النصائح وانا بصدد تعلم PHP و سأبدأ من نصائحك ان شاء الله






  4. #4
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    جزاك الله الف خيرا اخي الكريم
    علي الموضوع الجامد ده





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  5. #5


    بارك الله فيك
    متميز كعادتك

    أستفدت بشدة من الدرس وأنتظر باقي الدروس أخي





    __________________
    السيف أصدق أنباء من الكتب

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    شكرا للجميع على الوقت المبذول في القراءة ولعل الله يجعل في هذا الموضوع الفائدة لنا للجميع..


    ahmedwali تنويهك في محله أخي الكريم .. شكرا على اضافتك الجميلة.

    اسلام سوفت الشكر لله أخي العزيز، وفي انتظار برامجك القوية باذن الله..

    محمدهلال اسعدني اخي مرورك على الموضوع .. بالتوفيق،

    المجروح يشرفني مرورك أخي الكريم .. باذن الله ما يلي يسرك .. تقبل تحياتي،،





    __________________
    محمد حمود.

  7. #7
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    جزاك الله خيرا خي الكريم

    في سؤال انا ديما بستخدم الطريقة دية

    كود PHP:
    define('ABSPATH',dirname(__FILE__).'/'); 
    في تحديد المجلد الرئيسي

    وبعدين بستدعي الملفات في ملف واحد واستخدمة في جميع الملفات دلوقتي لو انا عاوذ استدعي هذا الملف في ملف داخل ملف في مجلد يعني اية مثلا الملف الي فيه الملفات في المجلد الرئيسي وعاوذ انا استخدمة داخل ملف في مجلد فرعي فما هي الطريقة ؟؟؟





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    اهلا اخي .. ما فعلناه هو اننا قمنا بتعريف المسار الحقيقي للمجلد الرئيسي للموقع مثلا..

    يعني للتقريب مثلا تجد في وندوز
    كود:
    c:\some\dir\
    طيب نحن الان وضعنا هذا الامر في صفحة في المسار الرئيسي للموقع ولتكن index.php

    ولدينا مجلدي includes و modules في المسار الرئيسي أيضا.

    ثم قمنا بتضمين صفحة اسمها test1.php من مجلد includes بهذا الكود
    كود PHP:
    include ABSPATH.'includes/test1.php'
    في الصفحة التي قمنا بتضمينها نريد وضع كود تضمين صفحة test2.php والموجودة بملف modules

    نقوم بوضع التالي
    كود PHP:
    include ABSPATH.'modules/test2.php'
    طيب .. أيضا ونحن في صفحة test2.php .. اذا اردنا تضمين ملف test3.php الواقع في المسار الرئيسي للموقع؟
    كود PHP:
    include ABSPATH.'test3.php'
    وهكذا .. نقيس مساراتنا نسبة الى المجلد الرئيسي او الذي قمنا بتعريفه ك absolute path





    __________________
    محمد حمود.

  9. #9
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    جزاك الله خيرا اخي الكريم

    كده انت لم تفهم قصدي انا عاوذ استدعي مثلا في مثالك ملف index.php في ملف text2.php الي هو في مجلد include

    يعني عاوذ استدعي ملف في المجلد الرئيسي في ملف في مجلد فرعي بهذا الطريقة





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    قاعدتنا هي وضع مسار الانكلود نسبة الى المجلد المعرف في ABSPATH ..

    فهمت منك انك فتحت الان ملف test2.php وتريد تضمين index.php الموجود في مسار أعلى منه

    في هذه الحالة ممكن تستخدم الطريقة العادية
    كود PHP:
    include '../index.php'
    أو أنك تقوم بمعرفة ال absolute path من خلال طباعته، ثم استخدامه يدويا بدون /includes في حالتنا هذه





    __________________
    محمد حمود.

  11. #11
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    جزاك الله الف خيرا اخي الكريم


    انا كنت بحسب في طريقة باستخدام هذا الطريقة
    جزاك الله خيرا اخي الكريم





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  12. #12


    بارك الله فيك يا غالي

    جميل جدااا





    __________________
    كن حكيم في استخدام عقلك

  13. #13
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    جزاك الله خيرا على هذا الدرس الرائع





    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  14. #14
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    كنت انوي جعلها للوصول للمستوى المتوسط في السكيوريتي الخاص بأكوادPHP
    و الله هذا ما نريده بالذات .
    بارك الله فيك.






  15. #15
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    38


    شكرا لك موضوع هايل










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض