شوّيت: شبكة كرة قدم اجتماعية




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو سوبر نشيط
#1  
الكاش او الملفات المؤقتة بأسهل الطرق

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

###########
لماذا الملفات المؤقتة

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

##############
فوائد الملفات المؤقتة

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

###########
الدوال التي سنحتاجها في الدرس وهي

file_exists التأكد من الملف هل هو موجود
filectime ارجاع وقت اخر تعديل
ob_start بداية حفظ المخرجات
ob_get_contents تعطينا المعلومات المسخرجة
ob_clean تقوم بمسح المعلومات التي تم حفظها في الذاكرة
opendir مقبض المجلد
readdir قارئ المجلد
unlink مسح الملفات
fopen مقبض الملفات
fwrite الكتابة على الملفات

##########
فكرة الدرس

سأشرح الفكرة نظريا لكي يسهل عليك عزيزي القارئ ان تفهم الشفرة

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

ثانيا

نضع وقت للملف المؤقت حتى يتم تحديثه بعد كل ساعة
ستقول لي بما اننا نمسح الملفات المؤقتة لحظة اضافة جديد
اذا ماذا نستفيد اذا تركنا الملف لمدة ساعة حتى يتم تحديثه

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

ثالثا
نقوم بحفظ الملف المؤقت بنفس الرقم الموجود في القاعدة او نفس رقم الصفحة

مثال بسيط
عندما يكون لدينا صفحة لاستخراج مقال واحد مثل
news.php?id=28
سيكون الملف المؤت هكذا
news-28.html
داخل مجلد الكاش او الملفات المؤقتة

#########
هيكلية البرنامج الذي سنستخدم عليه نظام الملفات المؤقتة
config.php
index.php
news.php
moderator.php
caches/
ملف config.php
كود PHP:
<?php
$dbserver
="localhost";
$dbuser="root";
$dbpass="";
$dbname="news";
@
mysql_connect($dbserver,$dbuser,$dbpass) or die ( mysql_error() );
@
mysql_select_db($dbname) or die ( mysql_error() );
$cache="caches/"//المجلد الذي سيتم تخزين الملفات المؤقتة
$exp=3600//فترة بقلت الكاش هو ساعة
?>
ملف index.php
كود PHP:
<?php
// سأقوم بتغير الوجهة بسرعة الى ملف العرض طبعا هذه الملفات للتجربة فقط
header("location: news.php");
?>
#########
عندما نضيف بيانات الى القاعدة

سنستخدم ملف moderator.php
كود PHP:
<?php
// في الواقع يجب حماية ملفات التحكم بكلة المرور وانا لم احمي الملف لاني فقط اشرح طريقة الكاش
include('config.php'); // تضمين ملف الاتصال بالقاعدة
// سيكون لدين جدول اسمه مثلا news
// وحقلين id و text
// اذا تمارسال شيئ ما عن طريق نموذج الارسال
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    
$news=$_POST['news']; // متغير يحمل الخبر اضا لم اقم بحماية المتغير يجب عليك حمايته
    
$send=mysql_query(" insert into news (text) values ('$news') ");
    if( 
$send ) {
        echo 
"تم الارسال بنجاح";
        
// هنا سيتم مسح المفات المؤقتة
        
if( $open=opendir($cache) ){
            
$cnt=0// متغير يحمل قيمة عددية
            
while( false !== $files=readdir($open) ){
                if( 
$files != '.' && $files != '..' ){
                    
//اذا تما مسح ملف او ملفات ستم احتساب عدد المرات
                    
if( unlink($files) ){
                        
$cnt++; // حفظ عدد مرات المسح
                    
}
                }
            }
        }
        if( 
$cnt ){
            echo 
" تم مسح ".$cnt." ملف";
        }
    }else{
        echo 
"لم يتم الارسال ";
    }
}else{
    
// هنا يكون نموذج الارسال اعتقد ان هذا مفهوم ومعروف
    // form
}

?>
الشفرة المسؤولة عن المسح يمكن جعلها دالة وتستخدمها في اي مكان بكل سهولة
############
عندما استعرض المعلومات من القاعدة

سنستخدم ملف news.php

كود PHP:
<?php
// في الواقع يجب حماية ملفات التحكم بكلة المرور وانا لم احمي الملف لاني فقط اشرح طريقة الكاش
ob_start(); // بداية تخزين المعلومات المتدفقة
include('config.php'); // تضمين ملف الاتصال بالقاعدة
$id=(!is_numeric($_GET['id'])? intval($_GET['id']));
// اذا كان الملف موجود ووقت انشاء الملف + الوقت الاضافي اكبر من الوقت الأن يعني لا يزال الوقت الاضافي لم ينتهي بعد
// الوقت الاضافي المقصود منها هو مثلا ساعة من الوقت كما وضعتها في ملف الاتصال
if( file_exists($cache.'news-0'.$id.'.html') && (filectime($cache.'news-'.$id.'.html')+$exp) > time() ){
    
// تضمين ملف الكاش واظهاره كأن النتيجة من قاعدة البيانات
    
include($cache.'news-'.$id.'.html');
}else{
    
// اذا كان المتغير الذي يحمل رقم المقالات المخزنة في القاعدة لا يعمل اذا سنعرض اخر عشر عناوين  من القاعدة
    
if( !isset($id) ){
        
        
// طباعة اخر 10 مقالات
        
$query=mysql_query"select  from news limit 10");
        
// اذا كان جدول المقالات غير فارغ
        
if( mysql_num_rows$query) > ) {
            while( 
$row=mysql_fetch_array($query) ){
                echo 
$row['id']." رقم المقال <br />";
                echo 
$row['text']." نص المقال <br />";
            }
        }else{
            echo 
"لا يوجد اي نتائج";
    
    }else{
        
// طباعة المقال الذي حمل رقم
        
$query=mysql_query"select  from news where id='$id' ");
        
// اذا كان رقم المقال موجود في القاعدة اي يوجد نتيجة اكبر من صفر
        
if( mysql_num_rows$query) > ) {
            while( 
$row=mysql_fetch_array($query) ){
                echo 
$row['id']." رقم المقال <br />";
                echo 
$row['news']." نص المقال <br />";
            }
        }else{
            echo 
"لا يوجد اي نتائج";
        }
    }
    
$data=ob_get_contents(); // حفظ المعلومات المتدفقة في متغير
    
echo $data// طباعة المحتوى
    // هنا سنقوم بانشاء او تعديل ملف وحفظ فيه معلومات المنتغير $data
    
$fp=fopen($cache.'news-'.$id.'.html','w+'); // انشاء الملف
    
fwrite($fp,$data); // الكتابة على الملف
    
ob_clean(); //مسح الذاكرة
}

?>
والحمد لله على اكمال الدرس

والسلام عليكم






__________________
للتواصل: في اجازة
عبد الواحد البشيري is offline   قديم 09-04-2009, 08:10 PM
الرد مع إقتباس
عضو مميز
#2  

هل جربت التعامل مع مسرعات ال php ومنها ال xcache ؟
تتيح لك تلك المسرعات بدوال قليلة ( 5 دوال ) علي حفظ ناتج في الذاكرة يمكنك من عمل serialize له وحفظه ومناداته في أي وقت او حذفه من الذاكرة إلخ
وهذه تريح كثير من نظام الملفات خاصة أن الذاكرة أسرع بكثير

وجزيل الشكر علي الشرح






محب الله ورسوله is offline   قديم 09-04-2009, 09:13 PM
الرد مع إقتباس
عضو سوبر نشيط
#3  

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






__________________
للتواصل: في اجازة
عبد الواحد البشيري is offline   قديم 09-04-2009, 09:20 PM
الرد مع إقتباس
عضو جديد
#4  

السلام عليكم

شرح مميز جدا أستاذ عبد الواحد وجاري القراءة

تحياتي لك ...






__________________
سبحان الله وبحمده ... والله أكبر
Nadjme is offline   قديم 09-04-2009, 10:49 PM
الرد مع إقتباس
عضو نشيط جدا
#5  

جزاك الله خيرا على الشرح .. اسمح لي بوضع لمحة عن عملية تخزين البيانات caching

في رأيي هناك شقين لا ينفصلان عند اجراء هذه العملية:

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

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

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


* في بعض الأحيان قد لا يكون من الحكمة وضع جزء كبير من البيانات على الذاكرة! لذلك يتم فرز البيانات وتوزيعها على عدة مستويات.
تكون أقربها باستخدام الرام. وباقي المستويات تعتمد على قاعدة البيانات أو الملفات.






__________________
محمد حمود.
mr_m is offline   قديم 10-04-2009, 01:22 AM
الرد مع إقتباس
عضو مميز
#6  

إقتباس:
المشاركة الأصلية بواسطة عبد الواحد البشيري مشاهدة مشاركة
لم اسمع به من قبل سأتطلع عليه شكرا لك
ياريت لو تضع شرح في هذا الموضوع او موضوع مستقل
تفضل
XcacheApi – XCache

هم فقط 6 دوال قمة في السهولة

كود PHP:
mixed xcache_get(string name)
bool  xcache_set(string namemixed value [, int ttl])
bool  xcache_isset(string name)
bool  xcache_unset(string name)
int   xcache_inc(string name [, int value [, int ttl]])
int   xcache_dec(string name [, int value [, int ttl]]) 
إقتباس:
المشاركة الأصلية بواسطة mr_m مشاهدة مشاركة
جزاك الله خيرا على الشرح .. اسمح لي بوضع لمحة عن عملية تخزين البيانات caching

في رأيي هناك شقين لا ينفصلان عند اجراء هذه العملية:

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

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

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


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

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

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

إلخ

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

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

تخيل معي قمت بعمل مكتبة برامج كاملة فيها صفحة مليئة بأكثر من 10 خصائص معظمها غير موجودة في أي مكتبة برامج أخر

ومتوسط تعليمات السكول 5 تعليمات سكول فقط كل صفحة






محب الله ورسوله is offline   قديم 10-04-2009, 12:41 PM
الرد مع إقتباس
عضو سوبر نشيط
#7  

Nadjme
شكرا لك على المرور اتمنى ان تستفيد

mr_m المجروح

ما تفضلتم به جميل جدا وعملي كذالك لا ننسى التعليمات الصحيحة ل mysql

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






__________________
للتواصل: في اجازة
عبد الواحد البشيري is offline   قديم 10-04-2009, 01:40 PM
الرد مع إقتباس
عضو مميز
#8  

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

mr_m المجروح

ما تفضلتم به جميل جدا وعملي كذالك لا ننسى التعليمات الصحيحة ل mysql

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

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

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






محب الله ورسوله is offline   قديم 10-04-2009, 03:47 PM
الرد مع إقتباس
عضو نشيط جدا
#9  

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

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

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

إلخ

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

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

تخيل معي قمت بعمل مكتبة برامج كاملة فيها صفحة مليئة بأكثر من 10 خصائص معظمها غير موجودة في أي مكتبة برامج أخر

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

الجدير بالذكر أنه في برامج ادارة المحتوى قد تحصل -معجزات- اذا صح التعبير ..
فقد يكون عدد الاستعلامات الى الزوار 3 : 1 وقد تصل النسبة الى 0.9 : 1
وهذا بسبب دراسة الكود + ا لـ هـ يـ كـ ل البرمجي المبني اساسا لغرض ال caching






__________________
محمد حمود.
mr_m is offline   قديم 10-04-2009, 04:48 PM
الرد مع إقتباس
عضو سوبر نشيط
#10  

نقاش سابق حول هذا الموضوع






__________________
مدونة .. ؟
dev11 is offline   قديم 10-04-2009, 05:03 PM
الرد مع إقتباس
عضو نشيط
#11  

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






__________________
Graphic Designing
Adobe ( Photoshop, Illustrateur, Indesign ) / Corel Draw / CINEMA 4D / 3D Max / Mac Flash, Front page2003
Programming
(Java, HTML,Css , PHP , (Still Learning.
mades is offline   قديم 13-04-2009, 02:19 PM
الرد مع إقتباس
عضو سوبر نشيط
#12  

فقط للفائدة

في CI طريقة عمل Cache هي بسطر واحد فقط :

كود PHP:
$this->output->cache(5); 
حيث ان الرقم 5 يعني 5 دقائق


ارق التحية






__________________
مدونتي | تويتر

almosmm is offline   قديم 13-04-2009, 10:11 PM
الرد مع إقتباس
عضو مميز
#13  

إقتباس:
المشاركة الأصلية بواسطة almosmm مشاهدة مشاركة
فقط للفائدة

في CI طريقة عمل Cache هي بسطر واحد فقط :

كود PHP:
$this->output->cache(5); 
حيث ان الرقم 5 يعني 5 دقائق


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

xcache
APC
نظام الملفات

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

بالماسبة نظام الكاش المعتمد علي ملفات وزمن للملف أصبح من الماضي

البرمجيات المتقدمة الأن تجد الكاش فيها مرتبط إما ب action أو بالكرون






محب الله ورسوله is offline   قديم 13-04-2009, 11:04 PM
الرد مع إقتباس
عضو نشيط جدا
#14  

almosmm صراحة لا اقتنع بان CodeIgniter مفيدة في ال caching

بسبب استهلاكها لموارد النظام الذي تسببه هي بمفردها + الكاش الموجودة بها وطريقة التحكم بدائيتين.


إقتباس:
بالماسبة نظام الكاش المعتمد علي ملفات وزمن للملف أصبح من الماضي

البرمجيات المتقدمة الأن تجد الكاش فيها مرتبط إما ب action أو بالكرون
اعمل في وقت الفراغ على ادخال ال AI بشكل بشكل كبير للتحكم في ال caching rules وتغييرها.

حيث يفهم البرنامج طبيعة تعامل المستخدمين مع المحتوى من خلال تحليل بعض الاحصائيات

مثل اماكن الضغطات و اوقات المكوث في الصفحة و الدول .... الخ.

على ما اراه منها الآن .. فلن تحتاج المواقع اكثر من استضافة shared الا لغرض تقديم خدمات مراكز التحميل وخلافه.

باذن الله اذا تم التطوير بشكل جيد قد تتاح منها اصدارات open source و عمل كتاب مجاني للشرح.






__________________
محمد حمود.
mr_m is offline   قديم 14-04-2009, 03:16 AM
الرد مع إقتباس
عضو نشيط
#15  

شكراً على الشرح المبسط
ملحوظه بسيطه .. نسيت
كود PHP:
fclose($fp); 
بعد التعديل على ملف الكاش ..






__________________
بيبرس لحلول الويب
www.bibrs.com
Bibrs Web is offline   قديم 14-04-2009, 07:28 AM
الرد مع إقتباس
عضو سوبر نشيط
#16  

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






__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
مهندس مصرى is offline   قديم 14-04-2009, 09:00 AM
الرد مع إقتباس
عضو مميز
#17  

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

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

طيب متي نحدث البيانات ؟
هكذا ستظل في الرام دائماً

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

ونادي دالتك هذه في كل مكان فيه تحديث للجروبات

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

ايضا ضعها في أخر الأكشن الخاصة بعمل update لمجموعة

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

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

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

============
ملحوظة أخواني
ركبت الأكس كاش علي السيرفر وبعده مباشرة قل إستهلاك الذاكرة لدي من 58% تقريبا ل 34% كمتوسط
وهذا أمر أكثر من رائع






محب الله ورسوله is offline   قديم 14-04-2009, 08:41 PM
الرد مع إقتباس
عضو سوبر نشيط
#18  

إقتباس:
المشاركة الأصلية بواسطة mr_m مشاهدة مشاركة
almosmm صراحة لا اقتنع بان CodeIgniter مفيدة في ال caching

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

اشرح لي عملياً اخي الفاضل! ارجوا ان لا تكون ممن يلقون بكلام " سمعوه " فقط من غيرهم ... لأنه وحتى الآن .. الجميع "وأعني المحترف والمبتدئ " يعلم ان CI هو من أقوى وأسرع إطارات العمل المتواجدة حالياً في الساحة ( يتفوق على CakePHP و Zend Framework وغيرهم )
انا لا اقول هذا الكلام فقط لأنني اقدم دروس CI هنا
ولا اريد ان اتطرق إلى الاسباب العلمية لأنني ذكرتها مراراً وتكراراً

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

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

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






__________________
مدونتي | تويتر

almosmm is offline   قديم 14-04-2009, 08:47 PM
الرد مع إقتباس
عضو سوبر نشيط
#19  

إقتباس:
المشاركة الأصلية بواسطة Bibrs Web مشاهدة مشاركة
شكراً على الشرح المبسط
ملحوظه بسيطه .. نسيت
كود PHP:
fclose($fp); 
بعد التعديل على ملف الكاش ..
صحيح نسيتها وهي مهمة جدا
شكرا لك
إقتباس:
المشاركة الأصلية بواسطة المجروح مشاهدة مشاركة
لا وقت ولا شئ أخي انت تخزن في الذاكرة بيانات بعد عمل serialize لها لحمايتها من أي تغير فيها
مثلا جلبت بيانات جروب الأعضاء في الموقع مع كل خياراتها في مصفوفة كبيرة
اعمل لها serialize وخزنها في الإكس كاش

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

طيب متي نحدث البيانات ؟
هكذا ستظل في الرام دائماً

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

ونادي دالتك هذه في كل مكان فيه تحديث للجروبات

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

ايضا ضعها في أخر الأكشن الخاصة بعمل update لمجموعة

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

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

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

============
ملحوظة أخواني
ركبت الأكس كاش علي السيرفر وبعده مباشرة قل إستهلاك الذاكرة لدي من 58% تقريبا ل 34% كمتوسط
وهذا أمر أكثر من رائع
بما ان المعلومات مخزنة في الذاكرة الا يسبب ذالك ضغط على الذاكرة






__________________
للتواصل: في اجازة
عبد الواحد البشيري is offline   قديم 14-04-2009, 10:39 PM
الرد مع إقتباس
عضو نشيط جدا
#20  

almosmm اهلا بك اخي نعم اعني بالفعل ان اطار العمل الجاهز يستهلك موارد النظام .. بشكل نسبي!

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

وبما اني قد مررت بمثل هذا الحديث من قبل فسوف اختصر الحوار حتى لا اكرره
كنت اقول لمن يحاورني ان يذهب لموقع يعتمد على ZF او CI -ما تم اختبارهم.
ثم يأتي بمتوسط اوقات التكوين لصفحات العرض ثم التدرج الى عملية شراء المنتج.
و كان الحد الادنى 7 ملي ثانية (يعني 0.007) والنتيجة عندي لم تزيد عن 2 ملي وهناك صفحات ظهر فيها 0.9 ملي.
* طبعا تمت مراعاة تشابه البرنامجين.


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






__________________
محمد حمود.

آخر تعديل بواسطة mr_m في 15-04-2009 الساعة 12:18 AM.
mr_m is offline   قديم 14-04-2009, 11:33 PM
الرد مع إقتباس
عضو نشيط جدا
#21  

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

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

؟






__________________
محمد حمود.
mr_m is offline   قديم 14-04-2009, 11:47 PM
الرد مع إقتباس
عضو سوبر نشيط
#22  

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

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

؟
الموضوع موضوعكم

والله اني استفدت من الردود شكرا لكم






__________________
للتواصل: في اجازة
عبد الواحد البشيري is offline   قديم 15-04-2009, 12:29 AM
الرد مع إقتباس
عضو مميز
#23  

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

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

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






محب الله ورسوله is offline   قديم 15-04-2009, 04:18 AM
الرد مع إقتباس
عضو نشيط جدا
#24  

هناك شيء قابلني عند عمل serializing لمصفوفات كبيرة لوضعها على الرام:

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

اما من قاعدة البيانات:
= البحث في جدول -مؤرشف في الاساس لغرض البحث-
= ارجاع مصفوفة واحدة فقط او عدم ارجاع شيء.


لذلك انتقلت لقاعدة البيانات فترة .. ثم انتقلت لوسيلة اراها افضل
وهي تخزين محتويات المصفوفة على شكل نص بدون serializing - ثم استعمال ال Regular Expressions في التحقق والارجاع.
نظرا لان التعامل مع النصوص اسرع واخف بمرات عديدة من التعامل مع المصفوفات.
وايضا يقتصد من المعالجة لدى البروسيسور، و قطعة الذاكرة المؤقتة من الرام والتي تخزن فيها المعلومات للمرة الثانية في كل تنفيذ للصفحة..






__________________
محمد حمود.

آخر تعديل بواسطة mr_m في 15-04-2009 الساعة 06:15 PM.
mr_m is offline   قديم 15-04-2009, 06:13 PM
الرد مع إقتباس
عضو مميز
#25  

إقتباس:
المشاركة الأصلية بواسطة mr_m مشاهدة مشاركة
هناك شيء قابلني عند عمل serializing لمصفوفات كبيرة لوضعها على الرام:

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

اما من قاعدة البيانات:
= البحث في جدول -مؤرشف في الاساس لغرض البحث-
= ارجاع مصفوفة واحدة فقط او عدم ارجاع شيء.


لذلك انتقلت لقاعدة البيانات فترة .. ثم انتقلت لوسيلة اراها افضل
وهي تخزين محتويات المصفوفة على شكل نص بدون serializing - ثم استعمال ال Regular Expressions في التحقق والارجاع.
نظرا لان التعامل مع النصوص اسرع واخف بمرات عديدة من التعامل مع المصفوفات.
وايضا يقتصد من المعالجة لدى البروسيسور، و قطعة الذاكرة المؤقتة من الرام والتي تخزن فيها المعلومات للمرة الثانية في كل تنفيذ للصفحة..
أخي أين تجرب ذلك ؟
لا تجرب علي السيرفر الشخصي ولكن جرب علي سيرفر حقيقي وأنت كزائر ( كان لدي كويري علي جهازي في السيرفر الخصي كانت تأخذ أقل من نصف ثانية وهو وقت كبير ولكن علي السيرفر أخذت بالضبط 39 ثانية تخيل !! من يومها وأنا أجرب علي السيرفر علي قاعدة بيانات مليئة بالمحتوي وليس علي السيرفر الشخصي في قاعدة بيانات خاوية )
كما أني لم أتكلم عن توفير الحمل علي الماي سكول فقط ولكن أيضا توفير الإستهلاك من الذاكرة
هذا غير أن تنفيذ تعليمة سكول من الأساس لا تجيب لك البيان من الهارد للمعالج
ولكن تنقلها للذاكرة ويبدأ المعالج التعامل معها ويبدوا أن فهمك للأمر خطأ أخي وبناءا عليه كان إستنتاجك خطأ
كما أنك في تعليمة السكول ترسل كويري يتم ترجمتها أولاً عن طريق الإنتربريتر لفهم المطلوب ثم تكوينه علي الهارد ثم نقله للذاكرة هم يبدأ المعالج بالتعامل معها

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

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

الفرق هنا تفرقه بين دالة serialize فقط
وبين عمود طويل من العمليات






محب الله ورسوله is offline   قديم 15-04-2009, 07:13 PM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
Notepad++ حرر ملفاتك بأسهل الطرق عالم المصمم برامج الحاسب 0 05-12-2008 01:17 AM
تعدد الصفحات 2 [ بأسهل الطرق ] أحمد أبو النصر PHP 8 05-06-2007 02:39 AM
تعدد الصفحات .. بأسهل الطرق ..! أحمد أبو النصر PHP 26 21-09-2006 10:32 PM
::. أرشفة الايميل بأسهل الطرق .:: سوريا تشات الويب والويب 2.0 والـ Semantic Web 3 09-12-2005 09:51 AM
أعـــــــــــــــــــرف مركز موقعك عالميا بأسهل الطرق WS_FTP الويب والويب 2.0 والـ Semantic Web 13 03-11-2004 05:50 AM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 03:51 PM.