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

الموضوع: هل تعرف ما معنى كلمة Optimization ؟

  1. #1

    هل تعرف ما معنى كلمة Optimization ؟



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

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

    نسمع ونرى كلمة Optimization في البرمجة بشكل كثير .. لذا أحببت أن أوضحها بشكل مبسط لأنه من المصطلحات الصعبة نوعاً ما في عالم البرمجة .

    ما معنى كلمة Optimization ؟

    إذا نظرت إلى معنى الكلمة في معجم خاص باللغة الإنجليزية فستجد معنها (تقليل أو تصغير أو ماشابه) .

    في البرمجة معنى Optimization يهتم بجزئين وهما :

    1- الحجم size .
    2- السرعة speed.

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

    هناك مشكلة في موضوع الـ Optimization !؟

    في عملية الـ Optimization هناك شئ يتم تنفيذه على حساب شئ أخر .. (كيف) ؟

    في عملية الـ Optimization هناك اعتبارين يؤثر كل منهما على الآخر وهذان الإعتباران هما :

    1- Compiling-time : وهو الوقت الذي يتم فيه ترجمة الكود من قبل مترجم لغة البرمجة وفي مثالنا هنا دعنا نقول أنه Zend وهو مترجم PHP .

    2- Execution-speed : وهي سرعة تنفيذ البرنامج الخاص بك.

    هذان العاملان يتم تنفيذ أحدهما بشكل جيد ولكن على حساب الأخر .. فإذا لم نجري أي عملية Optimization فإن عملية الـ Compiling-time أو أوقت الذي يستغرقه المترجم في ترجمة الشفرة قصير جداً وتكون مرحلة Compiling-time سريعة جداً ويكون الـ Execution-time عادي أو بطئ .

    أما إذا قمنا بأي عملية Optimization لجعل الكود صغير وسريع فإن هذه العملية ستتم في مرحلة Compiling-time مما يجعل هذه المرحلة بطيئة جداً بسبب دخول تقنيات الـ Optimization عليها بشكل إضافي مما يجعل سرعة في الـ Execution-time والذي يؤدي بدوره إلى بطء في الـ Compiling-time .

    وتقنية الـ Optimization يتم إستخدامها في الغالب مع مترجمات لغات البرمجة.

    والآن لو قلنا Zend فإنه بإختصار مترجم لغة PHP . ولكن ماذا لو قلنا Zend-Optimization ! .. فسنقول بإختصار أنها هي مجموعة التقنيات التي يستخدمها محرك Zend لتقليل شفرة PHP وجعلها سريعة في التنفيذ

    وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ..

    وتقبلوا تحياتي .. أخوكم عبدالله عيد





    __________________
    قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)


  2. #2
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    موضوع رائع وكلمة يحتاج الجميع الى تطبيقها , الترجمة لكلمة Optimization هي أمثَله (من جعل الشيء مثال) أو تحسين افضل الاخيره .

    أعتقد اننا في بي اتش بي سوف نهتم ب وقت التنفيذ (Execution-time) وسنتدع الباقي لفريق بي اتش بي, تصغير الشفره مهم جدا من مما يقلل من المعالجة للكود لكن تحسين الكود نفسه واقصد بلذك الطريقة البرمجية هو الاهم في عملية تحسين برنامج ما وجعله مثالي .

    مثال بسيط على ذلك
    كود PHP:
    SELECT FROM table_name 
    كود صغير , لكنه يجلب لنا جميع الحقول ونحن على سبيل المثال نستخدم فقط id - title اذا يحتاج الى أمثلَه .
    كود PHP:
    SELECT idtitle FROM table_name 
    هذا الكود هو نفس السابق لكن بعد عملية أمثَله له , وذلك بتحديد الحقول التى نستخدمها فقط وسيصح أداء البرنامج أفضل وأسرع ويستهلك موارد أقل من السابق .





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  3. #3


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

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

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

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


    نحتاج مثلاً رقم من جدول في حقل واحد فنحمل كل الجدول في الذاكرة
    وربما ينسي الكثير تفريغ الذاكرة حتي بعد الجلب

    جزيل الشكر لك أخي





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

  4. #4


    أستاذ المجروح (أول شئ سامح الله من جرحك !

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

    نحتاج مثلاً رقم من جدول في حقل واحد فنحمل كل الجدول في الذاكرة
    وربما ينسي الكثير تفريغ الذاكرة حتي بعد الجلب
    PHP من الداخل تستخدم مبدأ GC أو (Garbage Collection ) وهو مفهوم إذا ترجمناه حرفياً فلن يفيد في شئ لأنه سيكون بمعنى (جمع المهملات أو جمع القمامة ) أعزك الله ..

    وهي عبارة عن مجموعة من الدوال التي يتم إستدعائها داخلياً بعد إنتهاء تنفيذ أي Script في PHP وبهذه الطريقة فلن يكون هناك إهتمام من قبل المبرمج حول مايضعه في الذاكرة ,, أي بإختصار فإن الـ GC يقول للمبرمج (أنت برمج و أترك هم تنظيف الذاكرة علينا) .

    ولكن حديثك هذا طرح في ذهني سؤال جيد :

    بما أن PHP تستخدم مفهوم الـ GC في تنظيف مايبقى في الذاكرة فما فائدة دالة mysq_free_resource مثلاً والتي تقوم بتنظيف الأشياء هذه قبل انهاء التعامل مع قاعدة البيانات مثلاً ؟

    في الواقع mysql ليست جزءاً من اللغة نفسها وإنما هي عبارة عن Module موجود بداخل اللغة وإذا راجعت لغة PHP من الداخل فستجد أن محرك Zend ومترجم لغة PHP مفصولين تماماً عن الـ Modules التي يتم كتابتها لتوسيع لغة PHP مثل PDF, MySQL, Flash .,, إلخ.
    فهذه كلها مكتبات لتوسيع مهمة PHP فقط وليست من صلب اللغة وإنما هي دوال مضافة ولا تختص في عمليات الترجمة وما إلى ذلك من أمور .. لذا فإننا نجد دوال مثل mysql_free_resource والسبب هو أن PHP تقول بإختصار :
    الرجاء من جميع الـ Modules توفير دالة لتنظيف ماقام الموديول بعمله لذا فإننا نجد مثل دالة mysql_free_resource مع أن PHP تدعم الـ GC .

    ملاحظة أخيرة :

    بعض الـ Modules تعطي فرصة أخيرة لتنظيف ما تضعه في الذاكرة ولكن كيف ذلك ؟

    في حقيقة الأمر فإن PHP تعطي لكل Module دالتين الأولى تختص في عمليات Loading و الثانية لعملية الـ Unloading .. وبالنسبة لـ MySQL Module فإن دالة الـ Loading هي mysql_connect أو mysql_pconnect لأنهما يقومان بفتح إتصال جديد وأما دالة الـ Unloading فهي بإختصار دالة mysql_close .

    والفرصة الأخيرة تكون دائماً بجعل دالة الـ Unloading تقوم بتنظيف الذاكرة إذا لم يقم المستخدم بتنظيفها بإستخدام mysql_free_resource وهذا إجراء إحتياطي فإنه يتم تنظيفها عن طريق دالة mysql_close .

    ولكن هل كل الـ Modules بنفس الطريقة ؟

    لا فهذا يعتمد على من برمج الـ Modules نفسه فهو حر وليس له علاقة بلغة PHP حيث أن مبرمج الـ Module هو من يقرر كيفية تنظيف الذاكرة من حيث استخدامه لإمكانيات الـ GC الموجودة في PHP أو استخدام تقنيات تخصه هو أو ترك الذاكرة بدون تنظيف (مع أنه ليس أسلوب برمجي ) ..

    وبصراحة عجبني طرح الموضوع (أستاذ مجروح) ... وهنيئاً لك هذا العلم وهذا التفكير ماشاء الله لا قوة إلا بالله .

    وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ..

    تحياتي .. اخوكم عبدالله عيد





    __________________
    قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)

  5. #5
    عضو نشيط
    تاريخ التسجيل
    May 2008
    المشاركات
    114


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

    شكرا لك اخوي عبدالله عيد على الموضوع المفيد

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

    <<< الاخ مو فاهم شي من السالفة فيطلع برة احسن وخلي المخاتير تتكلم





    __________________
    ** العضوية مستعارة **

    ارجو من الادارة تغيير اسم عضويتي من
    حياة ديزاين

    إلى

    الحياة
    او
    Life0

  6. #6


    أخي العزيز عبدالله عيد
    أشكرك جزيل الشكر فأنا مازلت مبرمج مبتدئ
    ولكن كل ما في الأمر أني تخرجت من كلية الهندسة الإلكترونية فدرست الذاكرة والمعالج والجسور وال ic's وغيرها والأسمبلي بشكل مبسط مع كتابة برامج به ثم تلي ذلك سي بشكل مبسط
    لم أتقن برمجة في الكلية بقدر ما حصلت علي العلم الكافي ( ليس من الكلية ولكنها فتحت لي الطريق لأفهم ) عن كيفية عمل كل دالة
    هل تنفذ في المعالج فقط
    هل تأخذ وقت طويل
    هل يمكن التضحية قليلاً مع زيادة حجم الرام قليلاً

    كيف يتم وضع البيانات في الرام وعمل fetch لها
    لما يكون متغير فلكل عضو يحجز له حيز في الذاكرة غير محدد إنتظاراً لأي جديد قد يطرأ علي المتغير ولما يكون ثابت يحجز بدر الثابت بالضبط ويثبته للأخرين
    إلخ

    هذا يفيد بشدة في البرمجة

    بخصوص ما ذكرت أخي لم أكن أقصد التفريغ هذا فأنا لا أستخدم تلك الدالة مطلقاً في برمجتي رغم أنني وجدت الكثيريين يستعملوها
    ولكنني قصدت أننا قد نحمل مثل في buffer في أول الصفحة الكثير من البيانات وليكن التصنيفات بكل ما نريده فيها
    ثم نستخدمها بالأعلي وينتهي دورها
    فمن الممكن أن نفرغ محتوي البافر قبل إكمال الصفحة

    ربما هو جزء من الثانية ولكنها مع تعدد الزوار بكثرة سيعطي حمل أقل كثير علي الذاكرة التي قلصنا وجود البافر فيها لنصف الوقت مع كل زائر

    أتمني يكون ما قصدت وصل ولك جزيل الشكر علي موضوعك الرائع





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

  7. #7


    ما شاء الله تبارك الله .. (بش مهندس يعني ) الله يحفظك ..

    على العموم ماذكرته من قبل يمكن تطبيقه على موضوع الــ Buffer وحتى دوال _ob لأنها Module ...

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

    كود:
     mov eax, 0x0000 ; initialization
     mov almajrooh, 0x10 ; your rank from me
     mov eax,almajrooh ; store your name in register
     int 0x21 ; dos interrupt
    بصراحة أكن لك كل الإحترام وحتى لو كنت مبتدئ فهذا مشرف .. فمبتدئ بهذه الإمكانيات ماشاء الله وهذا الفهم العميق لحقائق الأمور خير ممن درسوا سنوات ويرون الناس أقل منهم وأتمنى لك حياة علمية رائعة ..

    تحياتي .. أخوك عبدالله عيد





    __________________
    قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)

  8. #8


    جزيل الشكر لك أخي عبدالله عيد
    صدقني أنا لست سوي مبرمج بدأ ال php من شهور لا تتعدة ال 5 منهم شهر ونصف لم أفعل شيئ يعني لو المبرمج من 1 - 10 سأضع نفسي عند 0.3
    لكني لدي الخبرة العملية كوني عملت ك analysis في إحدي الشركات الأجنبية لمدة تقارب العام مع كم من العباقرة في هذا المجال

    ==============
    كتطبيق عملي للأخوة حضرني خطأ شائع فبحثت لأجلب لكم شيئ عملي لكم يكون علي سبيل السين والجيم

    Select Last Row - SitePoint Forums

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

    ثم شاهد أخر رد عليه كيف كان مفيداً ( يمكن أستخدام هذه الطريقة في جلب أخر رد لكل قسم وتخزينه مع بيانات القسم القسم أو أخر رسالة لعرضها إلخ )

    فلما يكون هناك تعليمة جديدة ما دام يمكن الوصول بطرق اخري ؟
    دائما عليك أن تعلم أن الموجود الأن أكثر من كافي ولا تنتظر الجديد فكل الجديد ما هو سوي إختصار للقديم ولكنه أكثر من كافي للوصول فلو لم تجد ما تريد إعلم أن هناك مما بين يديك طريقة وأطلق العنان لتصل بالموارد التي بين يديك

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





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

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


    أخي العزيز عبدالله عيد
    أشكرك جزيل الشكر فأنا مازلت مبرمج مبتدئ
    ولكن كل ما في الأمر أني تخرجت من كلية الهندسة الإلكترونية فدرست الذاكرة والمعالج والجسور وال ic's وغيرها والأسمبلي بشكل مبسط مع كتابة برامج به ثم تلي ذلك سي بشكل مبسط
    لم أتقن برمجة في الكلية بقدر ما حصلت علي العلم الكافي ( ليس من الكلية ولكنها فتحت لي الطريق لأفهم ) عن كيفية عمل كل دالة
    هل تنفذ في المعالج فقط
    هل تأخذ وقت طويل
    هل يمكن التضحية قليلاً مع زيادة حجم الرام قليلاً

    كيف يتم وضع البيانات في الرام وعمل fetch لها
    لما يكون متغير فلكل عضو يحجز له حيز في الذاكرة غير محدد إنتظاراً لأي جديد قد يطرأ علي المتغير ولما يكون ثابت يحجز بدر الثابت بالضبط ويثبته للأخرين
    إلخ

    هذا يفيد بشدة في البرمجة

    بخصوص ما ذكرت أخي لم أكن أقصد التفريغ هذا فأنا لا أستخدم تلك الدالة مطلقاً في برمجتي رغم أنني وجدت الكثيريين يستعملوها
    ولكنني قصدت أننا قد نحمل مثل في buffer في أول الصفحة الكثير من البيانات وليكن التصنيفات بكل ما نريده فيها
    ثم نستخدمها بالأعلي وينتهي دورها
    فمن الممكن أن نفرغ محتوي البافر قبل إكمال الصفحة

    ربما هو جزء من الثانية ولكنها مع تعدد الزوار بكثرة سيعطي حمل أقل كثير علي الذاكرة التي قلصنا وجود البافر فيها لنصف الوقت مع كل زائر

    أتمني يكون ما قصدت وصل ولك جزيل الشكر علي موضوعك الرائع
    نفس السؤال راودني كثيراً ولم اجد اجابة شافية له
    لكن للعلم ستجد في تطبيق ارسال البريد الالكتروني للاعضاء في ال vb يستخدمها
    وكذلك عند عمل dump لقاعدة البيانات
    حاولت كثيرا البحث عن هذا ولم اتوصل لنتيجة او حتى اسم هذه الخاصية باللغة الانجليزية
    فهل من احد يستطيع الافادة في هذا الموضوع او حتى بالاسم؟





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

  10. #10
    عضو نشيط
    تاريخ التسجيل
    May 2006
    المشاركات
    78


    جميل جدا،، سلمت يداكم






  11. #11


    موضوع جميل بس Optomizer لأ تعني لل PHP فقط
    فهي تستخدم لمحركات البحث SEO
    وللعديد، اهم شيء انها معناها العام هو محاولة ضغط شيء لراحتك ولرفع الكفاءة





    __________________
    السعيد لخدمات الويب
    http://www.el-saeed.com





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

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

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