Zend_Cache-Theory.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="zend.cache.theory">
  4. <title>Teoria buforowania</title>
  5. <para>
  6. Są trzy kluczowe składniki w <classname>Zend_Cache</classname>. Pierwszym jest unikalny
  7. identyfikator (łańcuch znakow) który jest używany do identyfikowania
  8. rekordów bufora. Drugim jest dyrektywa <emphasis>'lifetime'</emphasis> jaką
  9. pokazano w przykładach; definiuje ona jak długo buforowany zasób jest
  10. uznawany za 'świeży'. Trzecim kluczowym składnikiem jest warunkowe
  11. wykonanie więc część twojego kodu może być ominięta, co powoduje wzrost
  12. wydajności. Główna funkcja frontendu (np.
  13. <methodname>Zend_Cache_Core::get()</methodname>) jest zawsze zaprojektowana tak, aby
  14. zwracała wartość false gdy bufor jest nieaktualny, jeśli jest to
  15. sensowne dla danego frontendu. To pozwala użytkownikom na ominięcie bloków
  16. kodu, które chcą buforować, zawierając je w wyrażenie <emphasis>if(){ ... }</emphasis>
  17. gdzie warunkiem jest metoda <classname>Zend_Cache</classname>. Na końcu
  18. takich bloków musisz zapisać to co wygenerowałeś (np. za pomocą metody
  19. <methodname>Zend_Cache_Core::save()</methodname>).
  20. </para>
  21. <note><para>
  22. Warunkowe uruchamianie twojego kodu nie jest konieczne w niektórych
  23. frontendach (na przykład <emphasis>Function</emphasis>), gdzie cała logika
  24. jest zaimplementowana we frontendzie.
  25. </para></note>
  26. <note><para>
  27. 'bufor istnieje' jest wyrażeniem określającym sytuację, w której
  28. rekord bufora został znaleziony, jest poprawny i jest 'świeży'
  29. 'fresh' (innymi słowy jeszcze nie wygasł). 'Bufor nie istnieje' jest
  30. wszystkim innym. Kiedy zdarzy się, że bufor nie istnieje musisz
  31. wygenerować swoje dane (tak jak robisz to normalnie) i zapisać je w
  32. buforze. Z drugiej strony, gdy bufor istnieje, backend automatycznie
  33. pobierze rekord z bufora.
  34. </para></note>
  35. <sect2 id="zend.cache.factory">
  36. <title>Metoda fabryki Zend_Cache</title>
  37. <para>
  38. Dobrym sposobem utworzenia użytecznej instancji frontendu
  39. <classname>Zend_Cache</classname> jest ten pokazany w poniższym przykładzie:
  40. </para>
  41. <programlisting language="php"><![CDATA[
  42. // Wybieramy backend (na przykład 'File' lub 'Sqlite'...)
  43. $backendName = '[...]';
  44. // Wybieramy frontend (na przykład 'Core', 'Output', 'Page'...)
  45. $frontendName = '[...]';
  46. // Ustawiamy tablicę opcji dla wybranego frontendu
  47. $frontendOptions = array([...]);
  48. // Ustawiamy tablicę opcji dla wybranego backendu
  49. $backendOptions = array([...]);
  50. // Tworzymy instancję klasy Zend_Cache
  51. // (oczywiście dwa ostatnie argumenty są opcjonalne)
  52. $cache = Zend_Cache::factory($frontendName,
  53. $backendName,
  54. $frontendOptions,
  55. $backendOptions);
  56. ]]></programlisting>
  57. <para>
  58. W poniższych przykładach założymy że zmienna <varname>$cache</varname> zawiera
  59. poprawną instancję frontendu i to, że rozumiesz jak przekazać
  60. parametry do wybranego backendu.
  61. </para>
  62. <note><para>
  63. Zawsze używaj metody <methodname>Zend_Cache::factory()</methodname> aby pobrać
  64. instancje frontendu. Tworzenie instancji frontendu czy backendu
  65. nie będzie przynosiło oczekiwanych rezultatów.
  66. </para></note>
  67. </sect2>
  68. <sect2 id="zend.cache.tags">
  69. <title>Nadawanie etykiet rekordom</title>
  70. <para>
  71. Etykiety są sposobem kategoryzowania rekordów bufora. Kiedy zapisujesz bufor
  72. za pomocą metody <methodname>save()</methodname>, możesz ustawić tablicę etykiet, które
  73. mają być przypisane danemu rekordowi. Wtedy będziesz miał możliwość
  74. usuwania wszystkich rekordów bufora oznaczonych daną etykietą (lub etykietami):
  75. </para>
  76. <programlisting language="php"><![CDATA[
  77. $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
  78. ]]></programlisting>
  79. <note><para>
  80. Zauważ, że metoda <methodname>save()</methodname> akceptuje opcjonalny czwarty
  81. argument: <varname>$specificLifetime</varname> (jeśli jego wartość jest
  82. inna od false, ustawiany jest określony czas ważności dla
  83. konkretnego rekordu bufora.
  84. </para></note>
  85. </sect2>
  86. <sect2 id="zend.cache.clean">
  87. <title>Czyszczenie bufora</title>
  88. <para>
  89. Aby usunąć/unieważnić rekord bufora o określonym id, możesz użyć
  90. metody <methodname>remove()</methodname>:
  91. </para>
  92. <programlisting language="php"><![CDATA[
  93. $cache->remove('idToRemove');
  94. ]]></programlisting>
  95. <para>
  96. Aby usunąć/unieważnić wiele rekordów bufora za jednym razem, możesz
  97. użyć metody <methodname>clean()</methodname>. Na przykład aby usunąć wszystkie
  98. rekordy bufora:
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. // czyszczenie wszystkich rekordów
  102. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  103. // czyszczenie jedynie nieaktualnych rekordów
  104. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  105. ]]></programlisting>
  106. <para>
  107. Jeśli chcesz usunąć rekordy bufora oznaczone etykietami 'tagA' oraz 'tagC':
  108. </para>
  109. <programlisting language="php"><![CDATA[
  110. $cache->clean(
  111. Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  112. array('tagA', 'tagC')
  113. );
  114. ]]></programlisting>
  115. <para>
  116. Jeśli chcesz usunąć rekordy bufora nieoznaczone etykietami 'tagA' oraz 'tagC':
  117. </para>
  118. <programlisting language="php"><![CDATA[
  119. $cache->clean(
  120. Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  121. array('tagA', 'tagC')
  122. );
  123. ]]></programlisting>
  124. <para>
  125. Jeśli chcesz usunąć rekordy bufora oznaczone etykietami 'tagA' lub 'tagC':
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. $cache->clean(
  129. Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  130. array('tagA', 'tagC')
  131. );
  132. ]]></programlisting>
  133. <para>
  134. Dostępne tryby czyszczenia bufora to: <constant>CLEANING_MODE_ALL</constant>,
  135. <constant>CLEANING_MODE_OLD</constant>, <constant>CLEANING_MODE_MATCHING_TAG</constant>,
  136. <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> oraz
  137. <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Trzy ostatnie, jak
  138. nazwa wskazuje, mogą w operacji czyszczenia być użyte wraz z tablicą
  139. etykiet.
  140. </para>
  141. </sect2>
  142. </sect1>