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

الموضوع: نظام تخزين المخرجات ( Cache Output ) بالشرح المفصل والامثلة العملية

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509

    Arrow نظام تخزين المخرجات ( Cache Output ) بالشرح المفصل والامثلة العملية



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

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

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

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

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

    لا اريد ان اطيل عليكم بالكلام وسأبدأ بان الله بشرح طريقة " تخزين المحتوى او تخزين المخرجات " Output Caching وهذه الطريقة رائعة جدا لمعالجة الصفحات الديناميكية وارسالها للمتصفح باكبر سسرعة ممكنة ... والفكرة هي ان السيرفر يقوم بعمل نسخة من محتوى الصفحة التي قمنا بزيارتها ويقوم بحفظ هذه النسخة بمجلد معين عادة ما يكون اسمه Cache , يحتوي الملف المخزن في هذا المجلد على بيانات الصفحة بعد معالجتها من قبل المتصفح وترجمة جميع الاكواد الى لغة html وهذا يعني ان الملف المخزن للصفحة الديناميكية هو ملف لكود غير ديناميكي وبالتالي فاني اعتقد بانكم ادركتم الجدوى من هذه الطريقة .

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

    اعلم بماذا يفكر قسم كبير منكم الآن ... لسان حالهم يقول : " ماذا يقول هذا المجنون ... فالصفحات الديناميكية اسم على مسمى وهي تتميز عن الصفحات العادية بكون بياناتها تتغير باستمرار فمثلا موقع للاخبار او منتدى يمكن ان يتغير محتوى الصفحة فيه كل دقيقة او اقل فاذا استعملنا هذه الخاصية عندها سيقوم السيرفر بتخزين نسخ للصفحات في وقت معين ... وبعد مدة من الزمن يقوم صاحب الموقع بتجديد البيانات عندها سيدخل الزائر ويرى نفس المحتوى القديم ولن يرى البيانات الجديدة وبالتالي سوف يخرج من الموقع معتقدا بانه لا يأتي بجديد " !!
    هذا التفكير جميل جدا ويدل على الفهم السليم للفرق بين الصفحات العادية والصفحات ذات المحتوى الديناميكي وهذا سيساعد اصحاب هؤلاء الادعاء بفهم الفكرة عندما سنقوم بعرضها برمجيا وابشرهم بان هناك حل مناسب جدا لهذه المشكلة .

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

    في بداية الملف النظام نقوم بتحديد فترة الاغراق للنظام بشكل عام وهذه الفترة يحددها كل صاحب موقع حسب اختياره فهناك اشخاص يتوقعون ان افضل فترة اغراق للموقع هي 10 دقائق ومنهن ما يتوقع بان 10 دقائق ليست كافية وانما 5 تكون انسب .

    وفترة الاغراق هي المدة الزمنية ( يمكن ان تكون بالدقائق او الثواني او الساعات او اكثر ) التي تمر منذ انشاء ملف الـ cache وحتى انتهاء هذه المدة وهذا يعني انني ان قمت بتحديد فترة الاغراق 10 دقائق في الموقع مثلا فان اي زائر يدخل سيقوم نظام تحزين المحتوى " Output Caching" بفحص شرطين اساسيين اما الاول فانه يفحص اذا ما كانت الصفحة التي نقوم بتصفحها مدرجة ضمن "صفحات التجاهل" وهي الصفحات التي نوفق عمل نظام التخزين عند الدخول اليها , بمعنى اننا نريد من السيرفر ان يعالج الاكواد البرمجية لهكذا نوع من الصفحات كل مرة ندخل فيها للصفحة ولا يقوم بتخزين نسخ لها في مجلد الـ cache .

    اما الشرط الثاني وهو الخاص بفترة الاغراق ... حيث يقوم النظام بالتحقق من صلاحية ملف cache ... بمعنى انه اذا كان قد مر 10 دقائق او اكثر على انشاء هذا الملف فان النظام سيقوم تلقائيا بتجديد محتوى الملف وادخال البيانات المحدثة اليه من خلال تشغيل الصفحة الديناميكية بشكل عادي ... واما اذا لم يتحقق هذا الشرط اي انه لما يمر لحد الان سوى 5 دقائق مثلا من اصل 10 ... فان النظام سيقوم باستخراج المحتوى المخزن للصفحة الحالية من المجلد cache وعرضه لنا وهكذا فانه لن يكرر نفس العمليات والاستعلامات التي سوف يكررها فيما لو لم يكن الموقع يحوي على هذا النظام , وعليه فانه سوف يخرج لنا المحتوى الـ html المترجم للصفحة وهذا لن يكلف السيرفر شي من الضغط او تبادل البيانات .

    الآن وقد قمنا ببلورة الفكرة نظريا وسننتقل الآن للقسم العملي ( البرمجي ) من هذا المقال وفيه سوف نعرض الكود اللازم لكي نمتلك نظام تخزين خاص بموقعنا , ينقسم الكود لقسمين ... قسم نقوم بوضعه قبل كود الصفحة نفسها ... والقسم الاخر نقوم بوضعه بعد الانتهاء من كتابة كود الصفحة .


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

    كود PHP:
        // الاعدادات العامة
        
    $cachedir 'cachefold/'// مسار مجلد الكاش في الموقع - مفضل ان تبقيه خارج مجلد الروت
        
    $cachetime '10'// فترة الاغراق بالدقائق
        
    $cacheext 'cache'// امتداد ملفات الكاش التي سوف تخزن في مجلد الكاش - عادة ما يكون cache,html,txt
     
        // قائمة التجاهل 
        
    $ignore_list = array(
         
    'page1.php',
         
    'page2.php' 
         'page3.php'  
         
    // يمكنك ان تضع اي صفحة لتكون في هذه المصفوفة        
        
    );
     
        
    // بداية تنفيذ الكود
        
    $page 'http://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // طلب عنوان الصفحة الحالية 
        
    $cachefile $cachedir $style md5($page) . '.' $cacheext// تعريف ملف الكاش اما لاستيراده او لبنائه
     
        
    $ignore_page false// اعطاء الصفحة الصفة الملائمة اما صفحة عادية او ضمن قائمة التجاهل
        
    for ($i 0$i count($ignore_list); $i++) {
            
    $ignore_page = (strpos($page$ignore_list[$i]) !== false) ? true $ignore_page;
        }
     
        
    $cachefile_created = ((@file_exists($cachefile)) and ($ignore_page === false)) ? @filemtime($cachefile) : 0// فحص صلاحية ملف الكاش حسب الشروط التي ذكرناها في الاعلى
        
    @clearstatcache();
     
        
    // فحص اذا كان ملف الكاش لهذه الصفحة ملائم ام انه تجاوز فترة الاغراق
        
    if (time() - $cachetime $cachefile_created) {
     
        
    // اذا كان الملف ملائم فان النظام سيقوم باستخراج محتواه وعرضها للزائر
     
            
    ob_start('ob_gzhandler');
            @
    readfile($cachefile);
            
    ob_end_flush();
            exit();
     
        } 
    والآن سنعرض الكود البرمجي والذي سنضعه بعد كتابة الكود الاساسي للصفحة :

    كود PHP:
        if ($ignore_page === false){ 
        
    // اذا لم تكن هذه الصفحة ضمن قائمة التجاهل فان النظام سيقوم بقرائه كود الهتمل لهذه الصفحة
        
    $fp = @fopen($cachefile'w'); 
     
        
    // بعد القراءة يقوم النظام بحفظ كود الهتمل داخل ملف كاش جديد في مجلد الكاش
        
    @fwrite($fpob_get_contents());
        @
    fclose($fp); 
        }
     
        
    ob_end_flush(); 
        } 
    والان اخواني وبعد الشرح الممل اعتقد بان كل شي واضح ... ولكن هذا الكود هو النواة فقط فهناك الامكانية لتطويره بشكل كبير وخيالي ... وضعت بين ايديكم المواد الخام والابداع يكمن في تطوير التقنيات والطرق الخلاقة للوصول لمستوى مقبول في عالم البرمجة وارجو من المشرفين التثبيت للافادة .

    اقبل النقد البناء ... على استعداد للاجابة عن اي سؤال او استفسار وفي النهاية اذكركم وانصحكم بعدم كتمان العلم .


    اخوكم المحب : EbNCaNa





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟


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


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

    ثانياً هناك اجزاء من بعض الصفحات نحتاجها بشكل ديناميكي ولا يمكن عملها بالشكل الاستاتيكي فالافضل لو تم تقسيم عمل الكاش في الصفحة بدلاً من الاستثناءات لصفحات كاملة (مجرد رأي)

    هناك انظمة كثيرة تستخدم نظام الكاش مثل نظام قوالب سمارتي و القالب السهل وغيرهم الكثير
    وهو بالفعل له تاثير رائع على سرعة عرض الموقع





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

  3. #3
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    السلام عليكم
    مشكور على الجهد المبذول






  4. #4
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    اخي لو في مثال بسيط حتى نبدي معاك بالتطبيق






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


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






  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


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

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

    مشكور على تفاعلك .


    الى الامام حبايبي .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  7. #7


    هل تقصد أنه لو صفحه بها مقالة يقوم بتخزينها مع المحتوي ( المقالة ) في صفحة html وعدم عمل الإستعلام فيما بعد لجلب المقالة من القاعدة ولكن عرضها مباشرة ؟
    لو كان ذلك فلي رد حول الأمر





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

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


    نعم اخوي المجروح كلامك صحيح ... واذا كان ردك بسؤال بانو ممكن فيما بعد رح يتم التعديل على المقال فهل سيبقى المحتوى القديم ظاهر ولن يظهر الجديد ؟؟ اذا كان هذا ردك فارجو ان تقرأ المقال كامل .

    شكرا على مرورك





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  9. #9


    لا ليس هذا ما أقصد ولكن ما قصدت أنه

    1- هذا النظام ماله دخل بنظام الكاش الخاص بالقوالب اللي تكلم عنه الأخ في مشاركته بالأعلي
    2- الفكرة بينهما متشابهة فنظام كاش القوالب هو لعدم تكرار التعابير القياسية المرهقة للغاية مع كل قالب يستدعي ولكن فقط حينما يتم تغير في القالب
    3- الكاش هنا هو تخزين الصفحة بالكامل بمحتواها المجلوب من قاعدة البيانات كصفحة هتمل يتم عرضها علي الفور بدون إرهاق للسيرفر مع التحديث لها كل فترة زمنية محددة
    4- هناك نظام مطور يمكنه تخزين الكاش في الرامات لسرعة الرامات المضاعفه بالنسبة للهارد مما يجعل البرمجية تعمل بشكل سريع وملفت للغاية
    5- يعيب عليها أنها غير صالحه مع المنتديات والبرمجيات التي تحوي نظام تعليقات فعال ونشط حيث يضيف العضو مشاركة فيجدها لا تظهر وهكذا

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





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

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


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

    شكرا لمرورك .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  11. #11


    مؤيد تماماً ولكن بشروط يجب أن يفهمها من سيستخدمه حتي لا يواجه مشاكل
    فمثلا لو البرمجية هي سكربت أخبار مغلق فيه الردود أو مكتبة موارد ( برامج كتب إلخ ) فسيكون رائع
    ولكن عند المنتديات وأمثالها سيكون الأمر مشكلة

    شغلت الكاش من قبل في المنتدي ( إضافة للسيرفر تجعل الكاش يخزن في الرام وهي شرهة للرام بشدة ولكنها رائعة )
    ولكني تفاجئت بالكثير من الأعضاء تشتكي أنها تضيف الرد وبعدها لا تجده يظهر
    ويكرروا العملية مما يكرر لدي الردود

    فأوقفته

    لهذا من يريد إستخدام الكاش فعليه إستخدام شيئ خاص وليس عام علي السيرفر
    ويكون في البرمجية يعلم جيداً أين يستخدمه

    المميزات

    - فتح الصفحة علي الفور للزائر
    - تقليل إستهلاك الموارد ( ترافيك - معالج - رامات )

    عيوب

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





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

  12. #12
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


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

    شرفتنا بملاحظاتك القيمة .. تقبل شكري .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

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


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






  14. #14
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


    اخوي النظام لا يزيد عن 20 سطر برمجي ... يمكن بكل سهولة تحويله لدوال او كلاسات وتمرير المتغيرات اليها ... هذا كلو يدخل ضمن عملية " تطوير " النظام ... انا حكيت اني وضعت النواة ... وكل شخص بحب يطورها بقدر بكل سهولة واذا في اي سؤال او استفسار بخصوص مشكلة بتطوير النظام انا جاهز مفش مشكلة حبيبي .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟





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

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

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