[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ar / module_specs / Zend_Cache-Introduction.xml
blobb440dcbd8dc368a17625b312baf21796969dd528
1 <sect1 id="zend.cache.introduction">
2     <title>مقدمة</title>
3     <para>
4         <code>Zend_Cache</code> يوفر إمكانية عمل cache للبيانات.
5     </para>
6       <para>
7           عملية الـ caching فى إطار عمل Zend يتم إدارتها من خلال مجموعة من الـ frontends فى حين ان سجلات الـ cache يتم حفظها
8            و استرجاعها عن طريق backend adapters مثل (<code>File</code>, <code>Sqlite</code>, <code>Memcache</code>...)
9           و يستخدم ايضا IDs و tags. بهذه الطريقة يكن من السهل حذف مجموعات محددة من السجلات بعد ذلك.
10           على سبيل المثال ("حذف كل سجلات الـ cache المعرفة بـ tag معين")
13     </para>
15     <para>
16         Core هو (<code>Zend_Cache_Core</code>) و هو يمثل المرونة و الشمولية و قابلية تعديل الخصائص (configurable).
17         حتى الأن يوجد مجموعة من الـ cache frontends تمتد عن <code>Zend_Cache_Core</code> و التى ستخدم احتياجاتك.
18         و هى : <code>Output</code>, <code>File</code>, <code>Function</code> و <code>Class</code>.
21     </para>
22     <example>
23         <title>إنشاء frontend بواسطة <code>()Zend_Cache::factory</code></title>
25         <para>
26             <code>()Zend_Cache::factory</code> ينشئ الـ objects المتوافقة معا و التى
27             ستحتاجها لإتمام عملك. فى هذا المثال, سنستخدم frontend و هو <code>Core</code>
28             و سنستخدم ايضا backend  وهو <code>File</code>.
30             <programlisting role="php"><![CDATA[<?php
31 require_once 'Zend/Cache.php';
33 $frontendOptions = array(
34    'lifeTime' => 7200, // cache lifetime of 2 hours
35    'automaticSerialization' => true
38 $backendOptions = array(
39     'cacheDir' => './tmp/' // Directory where to put the cache files
42 // getting a Zend_Cache_Core object
43 $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
45 ?>]]></programlisting>
46        </para>
47        <para>
49             الأن لدينا frontend و أيضا يمكننا عمل cache لأى نوع من البيانات (لأننا قمنا بتشغيل الـ serialization ) .
50  على سبيل المثال , يمكننا عمل cache لبيانات ناتجة عن تنفيذ استعلام كبير على قاعدة بيانات .
51  بعد عمل cache لهذه البيانات, لن نحتاج الى ان نتصل حتى بقاعدة البيانات فى المرات القادمة; كل ما علينا
52 هو جلب هذه البيانات من الـ cache و استخدامها (سيتم عمل unserialization للبيانات ضمنيا ).
53             <programlisting role="php"><![CDATA[<?php
55 // $cache initialized in previous example
57 // see if a cache already exists:
58 if(!$result = $cache->load('myresult')) {
60     // cache miss; connect to the database
62     $db = Zend_Db::factory( [...] );
64     $result = $db->fetchAll('SELECT * FROM huge_table');
66     $cache->save($result, 'myresult');
68 } else {
70     // cache hit! shout so that we know
71     echo "This one is from cache!\n\n";
75 print_r($result);
77 ?>]]></programlisting>
78        </para>
79     </example>
80     <example>
81         <title>عمل cache للخرج بإستخدام الـ Output frontend الخاصة بـ <code>Zend_Cache</code></title>
82         <para>
83            سنقوم بتحديد الأماكن التى نريد عمل cache لخرجها و ذلك بإستخدامنا لبعض الأكواد الشرطية,
84 سنضع بلوك الكود المحدد ما بين الـ method المسمى <code>()start</code> و الأخر المسمى <code>()end</code> .
85 ( هذا يعيد هيكلة المثال الأول و هذه هى الفكرة الأساسية للـ caching ).
86         </para><para>
87            بالداخل ستقوم بإخراج البيانات كالمعتاد, كل الخرج سيكن قد تم عمل cache له عندما يتم الوصول الى <code>()end</code> .
88 عند تشغيل هذا الكود مرة اخرى, لن يتم تنفيذ الكود المحدد فى هذا المكان لكن سيتم جلب البيانات من الـ cache
89 - و هذا طالما ان البيانات فى الـ cache مازالت قابلة للإستخدام .
90             <programlisting role="php"><![CDATA[<?php
92 $frontendOptions = array(
93    'lifeTime' => 30,                  // cache lifetime of half a minute
94    'automaticSerialization' => false  // this is default anyway
97 $backendOptions = array('cacheDir' => './tmp/');
99 $cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
101 // we pass a unique identifier to the start() method
102 if(!$cache->start('mypage')) {
103     // output as usual:
105     echo 'Hello world! ';
106     echo 'This is cached ('.time().') ';
108     $cache->end(); // the output is saved and sent to the browser
111 echo 'This is never cached ('.time().').';
113 ?>]]>       </programlisting>
114        </para>
115        <para>
116            لاحظ اننا نقوم بإخراج ناتج الدالة <code>()time</code> مرتين; و هذا نستخدمه هنا فقط للتوضيح.
117 جرب ان تشغل هذا مرة ثم قم بإعادة تشغيله عدة مرات متتالية, ستلاحظ ان الرقم الأول لا يتغير و
118 لكن الرقم الثانى يتغير مع مرور الوقت, هذا لأن الرقم الأول تم اخراجه فى منطقة الـ cache المحددة فى الكود
119 و بالتالى تم حفظه فى الـ cache على عكس بقية البيانات المخرجة.
120 بعد نصف دقيقة سيصبح الرقمين متساويين لأن فترة صلاحية البيانات فى الـ cache قد انتهت
121 ( لقد قمنا بوضع قيمة lifeTime الى 30 ثانية ). و بهذا سيتم تحديث قيمة البيانات المخزنة فى الـ cache
122 من جديد. - جرب هذا بنفسك فى متصفحك لتفهم ما يحدث.
123        </para>
124     </example>
125     <note><para>
126         عند إستخدام Zend_Cache, ركز على إعطاء معرف مميز للـ cache (الذى تمرره الى
127  <code>()start</code> و <code>()save</code> ) و يجب الا يتكرر فى عمليات cache اخرى.
128 الوقوع فى هذا الخطأ سيسبب تداخل بين البيانات و اسوأ ما سيحدث هو أن هذه البيانات ستظهر فى اماكن ظهور بيانات أخرى.
129     </para></note>
130 </sect1>
131 <!--
132 vim:se ts=4 sw=4 et: