النتائج 1 إلى 13 من 13

الموضوع: تحقيق أفضل أداء في php

  1. #1
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123

    تحقيق أفضل أداء في php



    السلام عليكم و رحمة الله وبركاته.

    يبحث أي مبرمج او مطور في هذه اللغة عن تحقيق أفضل أداء عند تنفيذ أي برنامج و مع الأسفل نتجاهل العديد من الأمور البسيطة و التي تسبب بطء في المتصفحة واستدعاء قاتل للذاكرة خاصة من قواعد البيانات او ملفات عادية , سوف أتطرق إلي اشهر الطريق التي توفر لك أفضل أداء ممكن تحصل علية عند تنفيذ برنامج, بداية بأهم الأساسيات التي نتجاهلها و نهاية في المسرعات التي نفشل في استخدامها , وقبل كل شيء التعليم أمر مهم و السؤال أمر جيد و هي خطوات في تعلم أي شيء .

    إن أي مبرمج يبحث عن أي لغة تكون الأسرع في تنفيذ البرامج بغض النظر عن سهولة هذا اللغة من صعوبتها و من أهم هذه اللغة c ,php , cgi , fastcgi , perl , mod_python وغيرها و من خلال الاختبارات التي تمت على هذا اللغات و جد ان لغة php من أفضل هذه اللغات و التي تتفوق مع اقرب لغة لها وهي fastcgi بالعديد من الثواني مع ملفات نصية صغيرة و تخيل الفرق مع ملفات أكبر , ولكن قد نلاحظ ان لغة fastcgi تتفوق على لغة البي اتش بي في برامج مستخدمة و السبب في ذلك هو المبرمج الذي يتجاهل العديد من الأمور الهامة و هي على النحو التالي :

    1- تجاهل تحليل للملفات او الشفرات بداخلها بعد تنفيذها :

    الغرض من ذلك هو توفير استعلام أفضل او أمر أفضل .

    عند كتابة شفرة في ملف يجب عليك ان تقيس سرعة إخراج النتائج و تغيير الشفرة للحصول على أفضل أداء .

    2-الاستخدام الخطأ للتوابع :

    وهذا الموضوع يحتاج وقت كبير للتفصيل وراح اختصر قد الامكان و نعلم ما توفرة هذه اللغة من توابع عديد و لكن متى نستخدمها و ايهما أفضل :


    استخدم أفضل الطرق لإخراج البيانات .

    توجد ثلاث طرق لإخراج البيانات إلى المستعرض و هي :
    -إخراج مباشر .
    -التابع echo
    -التابع print


    استخدم الإخراج المباشر قدر المكان فهو الأسرع بلا شك أيضا حاول تقليل استخدام التابع echo او print بأقل شكل ممكن .

    مثال :

    كود PHP:
    <?
    echo “مجموعة ترايدنت العربية  " ;
    echo “ تهتم في تطوير المواقع العربية   " 
    ;
    ?>

    تلاحظ استخدام التابع echo مرتين الأفضل و الأسرع هو مرة واحدة فقط

    كود PHP:
    <?
    echo “مجموعة ترايدنت العربية  تهتم في تطوير المواقع العربية   ";
    ?>

    استخدم أفضل الطرق لاستدعاء البيانات .

    هناك ثلاث طرق لاستدعاء البيانات وهي
    الأمر readfile ( )

    كود PHP:
    readfile ("اسم الملف"); 
    يستخدم اذا كان الملف لا يحتوي على شفرة او استعلام او استدعاء لملف اخر بمعني ملف html .

    كود PHP:
    include (" اسم الملف "); 
    الأمر include( ) .

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

    الأمر require( ) .
    يعمل نفس عمل الأمر السابق يقوم باستدعاء ملف خارجي أيضا لكن في حالة عدم وجود الملف سوف يعرض خطأ في الصفحة و سوف تتوقف الصفحة و لا يتم عرض محتوى الصفحة التي يتوفر بها هذا الأمر .

    الأمر include_once( ) .
    يعمل نفس عمل الأمر include( ) حيث يقوم بنفس عمل include ولكن الفرق الوحيد إذا كنت أدرجت الملف إثناء تنفيذ البرنامج وقمت بطلبه مرة أخرى فلن يتم إدراجه.


    الأمر require_once( )
    يعمل نفس عمل الأمر include_once( ) مع الأمر include( ) .


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


    تخزين و ضغط البيانات :

    لتخزين او تكديس الذاكرة و إخراج هذا التخزين و أهم توابعة .

    التابع

    كود PHP:
    ob_start(); 
    وفي العادة يتم وضعة في أول الملف من أجل تخزين للذاكرة طبعا يساعد ذلك في تسريع عرض الصفحة .

    يستمر التابع

    كود PHP:
    ob_start(); 
    في تخزين الذاكرة حتى تستخدم التابع الأخر لإغلاق التخزين وليس من الضروري استخدامه وهو التابع :

    كود PHP:
    ob_end_flush(); 

    عند استخدامك لهذه الطريقة قد لا تلاحظ فرق في زيارات الصفحة للمرة الاولى ولكن عند تمرير التباع :


    كود PHP:
    ob_gzhandler( ) 
    وهو استدعاء رجعي للذاكرة , و بهذه الطريقة مررنا التابع

    كود PHP:
    ob_gzhandler( ) 
    للتابع الأول و فائدة الأخير هي إخراج البيانات و بلا شك يفضل استخدام ذلك في جميع برامج خاص ان إصدار php أصبح أحدث من الإصدار 4.0.5 القديم الذي كان يواجهة العديد من المشاكل مع هذا ضياع الذاكرة مع التابع

    كود PHP:
    ob_gzhandler( ) 


    تلاحظ تحسن في فتح الصفحة بنسبة 60 % و سرعة كبيرة جدا كما هو موجود في المنتديات و العديد من البرامج .

    تعتبر الطريقة من أفضل الطرق في تحقيق الأداء الامثل لملفات php .

    وهي تخزين مؤقت للذاكرة و إخراج هذا التخزين بشكل مضغوط ...

    هناك توابع أخرى تعمل عمل السابقة و راح اكتفي بما ذكرت و الأخرى تتيح بعض الخيارات الغير ضرورية .

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


    قواعد البيانات و أنواع الأعمدة

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


    التعرف على أهم أنواع الأعمدة التي نستخدمها

    الأرقام
    TINYINT
    يخزن رقم صحيح من الصفر إلى 255

    SMALLINT
    أرقام صحيحة صغيرة

    INT
    أرقام صحيحة اعتيادية

    BIGINT
    أرقام صحيحة كبيرة جدا

    FLOAT
    أرقام صحيحة وجزئية ( عشرية ) ويمكن تحديد عرضة وعدد المنازل العشرية
    مثال FLOAT 4,2 الأرقم بين قوسين
    الرقم أربعة يعتبر عرض الخانات اي يصل الى 9999 والرقم 2 الارقام العشرية
    ويصبح اعلى رقم ممكن ان نصل الية 9999,99
    _ _ _

    التاريخ والوقت
    DATE
    التاريخ على الصورة yyyy-mm-dd
    yyyy السنة
    mm الشهر
    dd اليوم

    TIME
    الوقت على الصورة hh:mm:ss
    hh الساعة
    mm الدقيقة
    ss الثانية

    DATETIME
    تاريخ ووقت على الصورة yyyy-mm-ddhh:mm:ss


    VARCHAR
    نص قصير بطول متغير ولن ياخذ إلا نفس عدد الاحرف بالاضافة الى بايت واحد فقط
    ( أفضل من CHAR في توفير الحجم لكن CHAR اسرع )

    TINYTEXT
    لتخزين النصوص ذات الإحجام الصغيرة جدا

    TEXT
    لتخزين النصوص الأطول ذات الحجم العادي

    MEDIUMTEXT
    متوسط الحجم

    LONGTEXT
    طويلة الحجم


    TINYBLOB
    لتخزين بيانات ثنائية تستطيع ان تخزن في هذا النوع الصور والملفات مثل ملف
    مضغوط او ملف صوتي ...

    BLOB
    حجم عادي

    MEDIUMBLOB
    متوسط الحجم

    LONGBLOB
    كبيرا جدا


    ألان تعرفة على أهم هذه الأنواع لتحقيق أفضل أداء توفر التالي :

    لا تجعل تصريح أي عمود NULL قد الامكان فذلك يجعل كل شيء اسرع ويوفر بت واحد لكل عمود .

    حاول تقليل هذه الأنواع من الأعمدة قد الامكان LONGBLOB و BLOB و VARCHAR و MEDIUMTEXT و TEXT و MEDIUMBLOB عند تخزين بيانات بها تعطيك حجم كبير جدا من البيانات و لو أخذنا مثال على أنواع أخرى

    TINYINT يخزن 1 بايت
    و INT يخزن 4 بايت

    فاستخدام TINYINT أفضل من INT لقلة حجم البيانات .


    حاول أن يكون مفتاح الجدول الأساسي صغير جدا فذلك يسرع في عرض البيانات .

    حاول ان تعمل فهرسة لأهم الأعمدة التي يتم البحث بها كما هو موجود في منتديات VB وغيرها لتسريع عرض النتائج فالفهرسة توفر لك وقت مع جدول يستغرق البحث به 2 دقيقة إلى 4 ثواني فقط .


    حاول تحرير الذاكر في نهاية أي استعلام تقوم به .

    باستخدام

    كود PHP:
    mysql_free_result($sql); 

    فذلك يقلل من الضغط على قواعد البيانات .




    أخوكم بدر العنزي .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي


  2. #2


    بارك الله فيك عن هذا الموضوع الرائع والمفيد..

    سأرجع اليه هذا المساء ان شاء الله





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com

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


    فعلا موضوع جميل جاري التدقيق






  4. #4
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    حياك الله اخوي Nadorino و الاخ 2rabia.com و ارجو كتابة ما لديكم من معلومات لتحقيق افضل أداء لهذه اللغة .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Jun 2004
    المشاركات
    203


    كلام جميل ..لكن في طريقة العرض ( echo ) فليس الحل إلغاء إحداهم ..

    فكما فهمت من المثال بأن المقصود هو الفصل بين الجملتين بأسطر فراغ ..فالطريقة ستكون كالتالي

    كود PHP:
    <?php 
    echo “مجموعة ترايدنت العربية<br>تهتم في تطوير المواقع العربية" ; 
    ?>
    أو بطريقة أخرى

    كود PHP:
    <?php 
    echo <p>مجموعة ترايدنت العربية</p><p>تهتم في تطوير المواقع العربية</p>" ; 
    ?>
    فلا مجال لإستخدام هذه الدالة أو التحكم في طرق عرضها ..فالأفضل والأسرع هو كتابة أسطر الـ html كما هي

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

    وبدون أي فائدة ..فعلى المبرمج التقليل من الأسطر البرمجية قدر الإمكان!!

    أيضاً بخصوص لغات البرمجة فلا أرى لغتي المفضلة دائماً ASP.NET ..

    موضوع رائع ويستحق المفضلة ..دعواتك!!





    __________________
    { وَكَانَ الإنسَانُ أَكْثَرَ شَيْءٍ جَدَلاً } . صدق الله العظيم

  6. #6
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    الاخ it.7 لم اقصد بذلك هو الفصل بين عبارة او جملة ولكن اقصد التقليل من استخدام التابع echo بقدر الامكان



    لا حظ التالي الطريقة 1

    كود PHP:
    echo"$b<br>";

    echo
    "$a"
    الافضل الطريقة 2

    كود PHP:
    echo"$b<br>$a"


    فعند استخدام التابع echo لاخراج بيانات يستغرق ذلك وقت محدد حسب قيمة المتغير a و b و بلا شك ان الطريقة 2 أقل وقت وهي تحمل المتغيرين بالضبط .


    بمعنى اخر استخدام echo يقلل السرعة كلما زاد استخدامه و يفضل اختصار ذلك الى اقل قد ممكن .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي



  7. رائع جداً سلمت يُمناكـ

    http://phplens.com/lens/php-book/opt...ugging-php.php مقال رائع جدا يمكنكم الاستفاده منه

    قل ما هو الاسرع في التنفيذ ؟ ولماذا !!

    كود PHP:
    if (isset($keys['mangoes'])) {
    //  do some thing

    أمـ
    كود PHP:
    if(array_key_exists('mangoes'$keys))
    {
    //  do some thing

    هل تعلم
    أن
    كود PHP:
    if (1983 == $myyear
    أسرع من
    كود PHP:
    if ($myyear == 1983
    http://www.oreilly.com/catalog/regex/ الدليل

    همسه خاصه لمبرجي الـPHP
    كود PHP:
    $timeparts explode(" ",microtime());
    $endtime $timeparts[1].substr($timeparts[0],1);
    echo 
    "".$buildtime."الزمن الذي استغرق في بناء الصفحه: "bcsub($endtime,$starttime,6)." ثانيه!\n"
    أشكركـ مجددا ياjadweb.com لاتحافنا





    __________________
    ################################ PHP.SD ########
    We're not first,But We're the BEST

    ##

  8. #8
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    مشكور اخوي على كتابتك

    بخصوص سؤالك اعتقد أن

    كود PHP:
     if (isset($keys['برتقال'])) { 
    //  do some thing 

    اسرع من التالية و هناك نوع من الخداع بها , بما أنه يحمل القيم التالية

    كود PHP:
    $keys = array("تفاح""برتقال"); 
    ومشكور على التواجد و اضافة معلومات جديدة لدينا .


    ايهما اسرع print او echo

    تجد echo اسرع لا نه لا توجد لدية اي مشكلة عملة فقط الطباعة اما print فقط يكون بهذا الشكل :

    كود PHP:
    <?php 
    $ret 
    = print "Hello World"
    ?>
    شيء اخر استخدام if و كثرة الشروط تقلل من سرعة اي برنامج .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي

  9. #9


    موضوع رائع تشكر عليه، استخدمت('ob_start('ob_gzhandler وهذه النتيجة

    قبل:
    كود:
    Document Size - http://azzozhsn.net/
    	Documents (1 file)	12 kb
    	Images (3 files)	18 kb
    	Style Sheets (1 file)	761 bytes
    	Scripts (1 file)	5 kb
    	Total	36 kb
    وبعد:
    كود:
    Document Size - http://azzozhsn.net/
    	Documents (1 file)	4 kb
    	Images (3 files)	18 kb
    	Style Sheets (1 file)	761 bytes
    	Scripts (1 file)	5 kb
    	Total	28 kb






    __________________
    عزوز الحسني

  10. #10
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    العفو اخوي و ننتظر اسرار من أجل توفير افضل اداء خاصة مع شخص بمثل خبرتكم .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي

  11. #11


    لا تطرني رجاءً، معرفتي سطحية للغاية





    __________________
    عزوز الحسني



  12. مبدع بارك الله فيك ولاعدمنا يارب

    جعلها في موازين حسناتك

    ارق التحايا للجميع





    __________________
    كل مالا يعطى يضيع

  13. #13
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    ابو ماجد الكبير كبير لا يزيد له المدح شيء وانت كذالك , الاخ الإمبراطور وحيد سعيد بتواجدك و جزاك الله خير .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي





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

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

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