Zend_Cache-Theory.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <sect1 id="zend.cache.theory">
  2. <title>مفهوم الـ caching </title>
  3. <para>
  4. هناك ثلاث مفاهيم رئيسية فى Zend_Cache. الأول هو المعرف المميز و هو عيارة عن string
  5. و الذى يستخدم لتعريف البيانات المسجلة فى الـ cache.
  6. الثانى هو التعليمة <code>'lifeTime'</code> كما رأيتها فى المثال السابق, هى تعرف الفترة الزمنية التى
  7. يتم اعتبار البيانات المحفوظة فى الـ cache و بهذا المعرف قابلة للإستخدام "طازجة" .
  8. المفهوم الثالث هو التنفيذ الشرطى للأكواد, حيث يتم اهمال جزء من الكود و لا يتم تنفيذه و هذا يزيد من كفائة الأداء (performance) .
  9. الدالة الأساسية (<code>()Zend_Cache_Core::get</code>) تم تصميمها لتعيد false
  10. عندما لا تجد البيانات المطلوبة فى الـ cache قابلة للإستخدام .
  11. هذا يسمح للمستخدم النهائى (انت المبرمج) من تحديد جزء من الكود الذى يريد عمل cache له داخل جملة
  12. <code>{ ... }()if</code> حيث ان الشرط هو هذه الدالة من Zend_Cache .
  13. فى نهاية هذه البلوكات يجب ان تقوم بحفظ الناتج , بإستخدام
  14. (<code>()Zend_Cache_Core::save</code>).
  15. </para>
  16. <note><para>
  17. عملية التنفيذ الشرطى للأكواد لا تكن مهمة فى بعض الحالات ( مثل إستخدام الـ frontend المسمى
  18. <code>Function</code> ) حيث سيكون الجزء المنطقى من الكود معرف داخل الـ frontend نفسه.
  19. </para></note>
  20. <note><para>
  21. المصطلح 'Cache hit' و الذى رأيته فى المثال نستخدمه للتعبير عن انه تم إيجاد بيانت فى الـ cache تنتمى
  22. لهذا المعرف و هذه البيانات قابلة للإستخدام و "طازجة" (بمعنى اخر لم تنتهى فترة صلاحيتها).
  23. المصطلح 'cache miss' هو عكس ما سبق, فعندما يحدث cache miss يجب ان تقوم بإنتاج بياناتك من
  24. جديد (كما يحدث فى الأوضاع الطبيعية) ثم تقم بعمل cache لها .
  25. و عندما يحدث cache hit تقم الـ backend تلقائياً بجلب البيانات من الـ cache .
  26. </para></note>
  27. <sect2 id="zend.cache.factory">
  28. <title>الـ factory method فى <code>Zend_Cache</code></title>
  29. <para>
  30. طريقة جيدة لإنشاء frontend instance قابل لإستخدام من <code>Zend_Cache</code> نستعرضها فى
  31. المثال التالى :
  32. <programlisting role="php"><![CDATA[<?php
  33. # We "load" the Zend_Cache factory
  34. require 'Zend/Cache.php';
  35. # We choose a backend (for example 'File' or 'Sqlite'...)
  36. $backendName = '[...]';
  37. # We choose a frontend (for example 'Core', 'Output', 'Page'...)
  38. $frontendName = '[...]';
  39. # We set an array of options for the choosen frontend
  40. $frontendOptions = array([...]);
  41. # We set an array of options for the choosen backend
  42. $backendOptions = array([...]);
  43. # We make the good instance
  44. # (of course, the two last arguments are optional)
  45. $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);
  46. ?>]]></programlisting>
  47. </para>
  48. <para>
  49. فى الأمثلة التالية سنعتبر ان المتغير <code>cache$</code> يحتوى frontend instance صالح للإستخدام
  50. كما هو موضح فى المثال السابق, و انك تفهم كيفية تمرير parameters للـ backends التى تود إستخدامها.
  51. </para>
  52. <note><para>
  53. دائما إستخدم <code>()Zend_Cache::factory</code> لتنشئ frontend instance .
  54. إنشاء الـ frontend instance و الـ backends instance بنفسك مباشرة لن يعمل كما تتوقع.
  55. </para></note>
  56. </sect2>
  57. <sect2 id="zend.cache.tags">
  58. <title>إستخدام الـ tags</title>
  59. <para>
  60. الـ tags طرق لتقسيم البيانات فى الـ cache الى اقسام معرفة, عندما تقم بحفظ cache بإستخدام
  61. <code>()save</code> يمكنك ان تقم بتمرير array تحتوى على الـ tags التى تتوافق مع هذا الـ
  62. record (او البيانت المخزنة فى الـ cache ) .
  63. بالتالى ستستطيع حذف كل الـ cache records المنسوبة الى tag او مجموعة tags محددة.
  64. </para>
  65. <programlisting role="php"><![CDATA[<?php
  66. $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
  67. ?>]]></programlisting>
  68. </sect2>
  69. <sect2 id="zend.cache.clean">
  70. <title>تنظيف الـ cache</title>
  71. <para>
  72. لحذف او تحديد معرف cache على انه غير قابل للإستخدام, يمكنك استخدام <code>()remove</code>
  73. كما فى المثال التالى :
  74. </para>
  75. <programlisting role="php"><![CDATA[<?php
  76. $cache->remove('idToRemove');
  77. ?>]]></programlisting>
  78. <para>
  79. لحذف او تحديد اكثر من معرف cache على انهم غير قابلين للإستخدام, يمكنك استخدام
  80. <code>()clean</code> , على سبيل المثال يمكنك حذف كل الـ cache records .
  81. </para>
  82. <programlisting role="php"><![CDATA[<?php
  83. // clean all records
  84. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  85. // clean only outdated
  86. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  87. ?>]]> </programlisting>
  88. <para>
  89. إن اردت حذف الـ cache records التى تنتمى الى tags محددة, مثلا 'tagA' و 'tagC'
  90. يمكنك استخدام :
  91. </para>
  92. <programlisting role="php"><![CDATA[<?php
  93. $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC'));
  94. ?>]]> </programlisting>
  95. <para>
  96. الـ cleaning modes المتوفرة هى :
  97. <code>CLEANING_MODE_ALL</code> تقوم بحذف كل الـ cache records الموجودة
  98. , <code>CLEANING_MODE_OLD</code> تقوم بحذف الـ records القديمة او الغير
  99. صالحة للإستخدام
  100. ,
  101. <code>CLEANING_MODE_MATCHING_TAG</code> تقوم بحذف كل الـ records التى تنتمى الى مجموعة tags محددة
  102. ,<code>CLEANING_MODE_NOT_MATCHING_TAG</code> تقوم بحذف كل الـ records
  103. التى لا تنتمى الى مجموعة الـ tags الممررة.
  104. </para>
  105. </sect2>
  106. </sect1>
  107. <!--
  108. vim:se ts=4 sw=4 et:
  109. -->