1 <?xml version="1.0" encoding="UTF-8"?>
3 <sect1 id="zend.cache.theory">
4 <title>Teoria buforowania</title>
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>).
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.
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.
35 <sect2 id="zend.cache.factory">
36 <title>Metoda fabryki Zend_Cache</title>
38 Dobrym sposobem utworzenia użytecznej instancji frontendu
39 <classname>Zend_Cache</classname> jest ten pokazany w poniższym przykładzie:
41 <programlisting language="php"><![CDATA[
42 // Wybieramy backend (na przykład 'File' lub 'Sqlite'...)
43 $backendName = '[...]';
45 // Wybieramy frontend (na przykład 'Core', 'Output', 'Page'...)
46 $frontendName = '[...]';
48 // Ustawiamy tablicę opcji dla wybranego frontendu
49 $frontendOptions = array([...]);
51 // Ustawiamy tablicę opcji dla wybranego backendu
52 $backendOptions = array([...]);
54 // Tworzymy instancję klasy Zend_Cache
55 // (oczywiście dwa ostatnie argumenty są opcjonalne)
56 $cache = Zend_Cache::factory($frontendName,
62 W poniższych przykładach założymy że zmienna <varname>$cache</varname> zawiera
63 poprawną instancję frontendu i to, że rozumiesz jak przekazać
64 parametry do wybranego backendu.
67 Zawsze używaj metody <methodname>Zend_Cache::factory()</methodname> aby pobrać
68 instancje frontendu. Tworzenie instancji frontendu czy backendu
69 nie będzie przynosiło oczekiwanych rezultatów.
73 <sect2 id="zend.cache.tags">
74 <title>Nadawanie etykiet rekordom</title>
76 Etykiety są sposobem kategoryzowania rekordów bufora. Kiedy zapisujesz bufor
77 za pomocą metody <methodname>save()</methodname>, możesz ustawić tablicę etykiet, które
78 mają być przypisane danemu rekordowi. Wtedy będziesz miał możliwość
79 usuwania wszystkich rekordów bufora oznaczonych daną etykietą (lub etykietami):
81 <programlisting language="php"><![CDATA[
82 $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
85 Zauważ, że metoda <methodname>save()</methodname> akceptuje opcjonalny czwarty
86 argument: <varname>$specificLifetime</varname> (jeśli jego wartość jest
87 inna od false, ustawiany jest określony czas ważności dla
88 konkretnego rekordu bufora.
91 <sect2 id="zend.cache.clean">
92 <title>Czyszczenie bufora</title>
94 Aby usunąć/unieważnić rekord bufora o określonym id, możesz użyć
95 metody <methodname>remove()</methodname>:
97 <programlisting language="php"><![CDATA[
98 $cache->remove('idToRemove');
101 Aby usunąć/unieważnić wiele rekordów bufora za jednym razem, możesz
102 użyć metody <methodname>clean()</methodname>. Na przykład aby usunąć wszystkie
105 <programlisting language="php"><![CDATA[
106 // czyszczenie wszystkich rekordów
107 $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
109 // czyszczenie jedynie nieaktualnych rekordów
110 $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
113 Jeśli chcesz usunąć rekordy bufora oznaczone etykietami 'tagA' oraz 'tagC':
115 <programlisting language="php"><![CDATA[
117 Zend_Cache::CLEANING_MODE_MATCHING_TAG,
118 array('tagA', 'tagC')
122 Jeśli chcesz usunąć rekordy bufora nieoznaczone etykietami 'tagA' oraz 'tagC':
124 <programlisting language="php"><![CDATA[
126 Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
127 array('tagA', 'tagC')
131 Jeśli chcesz usunąć rekordy bufora oznaczone etykietami 'tagA' lub 'tagC':
133 <programlisting language="php"><![CDATA[
135 Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
136 array('tagA', 'tagC')
140 Dostępne tryby czyszczenia bufora to: <constant>CLEANING_MODE_ALL</constant>,
141 <constant>CLEANING_MODE_OLD</constant>, <constant>CLEANING_MODE_MATCHING_TAG</constant>,
142 <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> oraz
143 <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Trzy ostatnie, jak
144 nazwa wskazuje, mogą w operacji czyszczenia być użyte wraz z tablicą