Zend_Cache-Introduction.xml 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <sect1 id="zend.cache.introduction">
  2. <title>مقدمة</title>
  3. <para>
  4. <code>Zend_Cache</code>
  5. يوفر إمكانية عمل cache للبيانات.
  6. </para>
  7. <para>
  8. عملية الـ caching فى إطار عمل Zend يتم إدارتها من خلال مجموعة من الـ
  9. frontends فى حين ان سجلات الـ cache يتم حفظها
  10. و استرجاعها عن طريق backend adapters مثل (
  11. <code>File</code>
  12. ,
  13. <code>Sqlite</code>
  14. ,
  15. <code>Memcache</code>
  16. ...)
  17. و يستخدم ايضا IDs و tags. بهذه الطريقة يكن من السهل حذف مجموعات محددة
  18. من السجلات بعد ذلك.
  19. على سبيل المثال ("حذف كل سجلات الـ cache المعرفة بـ tag معين")
  20. </para>
  21. <para>
  22. Core هو (
  23. <code>Zend_Cache_Core</code>
  24. ) و هو يمثل المرونة و الشمولية و قابلية تعديل الخصائص (configurable).
  25. حتى الأن يوجد مجموعة من الـ cache frontends تمتد عن
  26. <code>Zend_Cache_Core</code>
  27. و التى ستخدم احتياجاتك.
  28. و هى :
  29. <code>Output</code>
  30. ,
  31. <code>File</code>
  32. ,
  33. <code>Function</code>
  34. و
  35. <code>Class</code>
  36. .
  37. </para>
  38. <example>
  39. <title>
  40. إنشاء frontend بواسطة
  41. <code>()Zend_Cache::factory</code>
  42. </title>
  43. <para>
  44. <code>()Zend_Cache::factory</code>
  45. ينشئ الـ objects المتوافقة معا و التى
  46. ستحتاجها لإتمام عملك. فى هذا المثال, سنستخدم frontend و هو
  47. <code>Core</code>
  48. و سنستخدم ايضا backend وهو
  49. <code>File</code>
  50. .
  51. <programlisting role="php"><![CDATA[<?php
  52. require_once 'Zend/Cache.php';
  53. $frontendOptions = array(
  54. 'lifeTime' => 7200, // cache lifetime of 2 hours
  55. 'automaticSerialization' => true
  56. );
  57. $backendOptions = array(
  58. 'cacheDir' => './tmp/' // Directory where to put the cache files
  59. );
  60. // getting a Zend_Cache_Core object
  61. $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
  62. ?>]]></programlisting>
  63. </para>
  64. <para>
  65. الأن لدينا frontend و أيضا يمكننا عمل cache لأى نوع من البيانات
  66. (لأننا قمنا بتشغيل الـ serialization ) .
  67. على سبيل المثال , يمكننا عمل cache لبيانات ناتجة عن تنفيذ استعلام كبير
  68. على قاعدة بيانات .
  69. بعد عمل cache لهذه البيانات, لن نحتاج الى ان نتصل حتى بقاعدة البيانات فى
  70. المرات القادمة; كل ما علينا
  71. هو جلب هذه البيانات من الـ cache و استخدامها (سيتم عمل unserialization
  72. للبيانات ضمنيا ).
  73. <programlisting role="php"><![CDATA[<?php
  74. // $cache initialized in previous example
  75. // see if a cache already exists:
  76. if(!$result = $cache->load('myresult')) {
  77. // cache miss; connect to the database
  78. $db = Zend_Db::factory( [...] );
  79. $result = $db->fetchAll('SELECT * FROM huge_table');
  80. $cache->save($result, 'myresult');
  81. } else {
  82. // cache hit! shout so that we know
  83. echo "This one is from cache!\n\n";
  84. }
  85. print_r($result);
  86. ?>]]></programlisting>
  87. </para>
  88. </example>
  89. <example>
  90. <title>
  91. عمل cache للخرج بإستخدام الـ Output frontend الخاصة بـ
  92. <code>Zend_Cache</code>
  93. </title>
  94. <para>
  95. سنقوم بتحديد الأماكن التى نريد عمل cache لخرجها و ذلك بإستخدامنا لبعض
  96. الأكواد الشرطية,
  97. سنضع بلوك الكود المحدد ما بين الـ method المسمى
  98. <code>()start</code>
  99. و الأخر المسمى
  100. <code>()end</code>
  101. .
  102. ( هذا يعيد هيكلة المثال الأول و هذه هى الفكرة الأساسية للـ caching ).
  103. </para>
  104. <para>
  105. بالداخل ستقوم بإخراج البيانات كالمعتاد, كل الخرج سيكن قد تم عمل cache
  106. له عندما يتم الوصول الى
  107. <code>()end</code>
  108. .
  109. عند تشغيل هذا الكود مرة اخرى, لن يتم تنفيذ الكود المحدد فى هذا المكان
  110. لكن سيتم جلب البيانات من الـ cache
  111. - و هذا طالما ان البيانات فى الـ cache مازالت قابلة للإستخدام .
  112. <programlisting role="php"><![CDATA[<?php
  113. $frontendOptions = array(
  114. 'lifeTime' => 30, // cache lifetime of half a minute
  115. 'automaticSerialization' => false // this is default anyway
  116. );
  117. $backendOptions = array('cacheDir' => './tmp/');
  118. $cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
  119. // we pass a unique identifier to the start() method
  120. if(!$cache->start('mypage')) {
  121. // output as usual:
  122. echo 'Hello world! ';
  123. echo 'This is cached ('.time().') ';
  124. $cache->end(); // the output is saved and sent to the browser
  125. }
  126. echo 'This is never cached ('.time().').';
  127. ?>]]>
  128. </programlisting>
  129. </para>
  130. <para>
  131. لاحظ اننا نقوم بإخراج ناتج الدالة
  132. <code>()time</code>
  133. مرتين; و هذا نستخدمه هنا فقط للتوضيح.
  134. جرب ان تشغل هذا مرة ثم قم بإعادة تشغيله عدة مرات متتالية, ستلاحظ ان
  135. الرقم الأول لا يتغير و
  136. لكن الرقم الثانى يتغير مع مرور الوقت, هذا لأن الرقم الأول تم اخراجه فى
  137. منطقة الـ cache المحددة فى الكود
  138. و بالتالى تم حفظه فى الـ cache على عكس بقية البيانات المخرجة.
  139. بعد نصف دقيقة سيصبح الرقمين متساويين لأن فترة صلاحية البيانات فى الـ
  140. cache قد انتهت
  141. ( لقد قمنا بوضع قيمة lifeTime الى 30 ثانية ). و بهذا سيتم تحديث قيمة
  142. البيانات المخزنة فى الـ cache
  143. من جديد. - جرب هذا بنفسك فى متصفحك لتفهم ما يحدث.
  144. </para>
  145. </example>
  146. <note>
  147. <para>
  148. عند إستخدام Zend_Cache, ركز على إعطاء معرف مميز للـ cache (الذى تمرره
  149. الى
  150. <code>()start</code>
  151. و
  152. <code>()save</code>
  153. ) و يجب الا يتكرر فى عمليات cache اخرى.
  154. الوقوع فى هذا الخطأ سيسبب تداخل بين البيانات و اسوأ ما سيحدث هو أن هذه
  155. البيانات ستظهر فى اماكن ظهور بيانات أخرى.
  156. </para>
  157. </note>
  158. </sect1>
  159. <!-- vim:se ts=4 sw=4 et: -->