Zend_Cache-Theory.xml 5.6 KB

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