| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.cache.theory">
- <title>Teoria buforowania</title>
- <para>
- Są trzy kluczowe składniki w <classname>Zend_Cache</classname>. Pierwszym jest unikalny
- identyfikator (łańcuch znakow) który jest używany do identyfikowania
- rekordów bufora. Drugim jest dyrektywa <emphasis>'lifetime'</emphasis> jaką
- pokazano w przykładach; definiuje ona jak długo buforowany zasób jest
- uznawany za 'świeży'. Trzecim kluczowym składnikiem jest warunkowe
- wykonanie więc część twojego kodu może być ominięta, co powoduje wzrost
- wydajności. Główna funkcja frontendu (np.
- <methodname>Zend_Cache_Core::get()</methodname>) jest zawsze zaprojektowana tak, aby
- zwracała wartość false gdy bufor jest nieaktualny, jeśli jest to
- sensowne dla danego frontendu. To pozwala użytkownikom na ominięcie bloków
- kodu, które chcą buforować, zawierając je w wyrażenie <emphasis>if(){ ... }</emphasis>
- gdzie warunkiem jest metoda <classname>Zend_Cache</classname>. Na końcu
- takich bloków musisz zapisać to co wygenerowałeś (np. za pomocą metody
- <methodname>Zend_Cache_Core::save()</methodname>).
- </para>
- <note><para>
- Warunkowe uruchamianie twojego kodu nie jest konieczne w niektórych
- frontendach (na przykład <emphasis>Function</emphasis>), gdzie cała logika
- jest zaimplementowana we frontendzie.
- </para></note>
- <note><para>
- 'bufor istnieje' jest wyrażeniem określającym sytuację, w której
- rekord bufora został znaleziony, jest poprawny i jest 'świeży'
- 'fresh' (innymi słowy jeszcze nie wygasł). 'Bufor nie istnieje' jest
- wszystkim innym. Kiedy zdarzy się, że bufor nie istnieje musisz
- wygenerować swoje dane (tak jak robisz to normalnie) i zapisać je w
- buforze. Z drugiej strony, gdy bufor istnieje, backend automatycznie
- pobierze rekord z bufora.
- </para></note>
- <sect2 id="zend.cache.factory">
- <title>Metoda fabryki Zend_Cache</title>
- <para>
- Dobrym sposobem utworzenia użytecznej instancji frontendu
- <classname>Zend_Cache</classname> jest ten pokazany w poniższym przykładzie:
- </para>
- <programlisting language="php"><![CDATA[
- // Wybieramy backend (na przykład 'File' lub 'Sqlite'...)
- $backendName = '[...]';
- // Wybieramy frontend (na przykład 'Core', 'Output', 'Page'...)
- $frontendName = '[...]';
- // Ustawiamy tablicę opcji dla wybranego frontendu
- $frontendOptions = array([...]);
- // Ustawiamy tablicę opcji dla wybranego backendu
- $backendOptions = array([...]);
- // Tworzymy instancję klasy Zend_Cache
- // (oczywiście dwa ostatnie argumenty są opcjonalne)
- $cache = Zend_Cache::factory($frontendName,
- $backendName,
- $frontendOptions,
- $backendOptions);
- ]]></programlisting>
- <para>
- W poniższych przykładach założymy że zmienna <varname>$cache</varname> zawiera
- poprawną instancję frontendu i to, że rozumiesz jak przekazać
- parametry do wybranego backendu.
- </para>
- <note><para>
- Zawsze używaj metody <methodname>Zend_Cache::factory()</methodname> aby pobrać
- instancje frontendu. Tworzenie instancji frontendu czy backendu
- nie będzie przynosiło oczekiwanych rezultatów.
- </para></note>
- </sect2>
- <sect2 id="zend.cache.tags">
- <title>Nadawanie etykiet rekordom</title>
- <para>
- Etykiety są sposobem kategoryzowania rekordów bufora. Kiedy zapisujesz bufor
- za pomocą metody <methodname>save()</methodname>, możesz ustawić tablicę etykiet, które
- mają być przypisane danemu rekordowi. Wtedy będziesz miał możliwość
- usuwania wszystkich rekordów bufora oznaczonych daną etykietą (lub etykietami):
- </para>
- <programlisting language="php"><![CDATA[
- $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
- ]]></programlisting>
- <note><para>
- Zauważ, że metoda <methodname>save()</methodname> akceptuje opcjonalny czwarty
- argument: <varname>$specificLifetime</varname> (jeśli jego wartość jest
- inna od false, ustawiany jest określony czas ważności dla
- konkretnego rekordu bufora.
- </para></note>
- </sect2>
- <sect2 id="zend.cache.clean">
- <title>Czyszczenie bufora</title>
- <para>
- Aby usunąć/unieważnić rekord bufora o określonym id, możesz użyć
- metody <methodname>remove()</methodname>:
- </para>
- <programlisting language="php"><![CDATA[
- $cache->remove('idToRemove');
- ]]></programlisting>
- <para>
- Aby usunąć/unieważnić wiele rekordów bufora za jednym razem, możesz
- użyć metody <methodname>clean()</methodname>. Na przykład aby usunąć wszystkie
- rekordy bufora:
- </para>
- <programlisting language="php"><![CDATA[
- // czyszczenie wszystkich rekordów
- $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
- // czyszczenie jedynie nieaktualnych rekordów
- $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
- ]]></programlisting>
- <para>
- Jeśli chcesz usunąć rekordy bufora oznaczone etykietami 'tagA' oraz 'tagC':
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(
- Zend_Cache::CLEANING_MODE_MATCHING_TAG,
- array('tagA', 'tagC')
- );
- ]]></programlisting>
- <para>
- Jeśli chcesz usunąć rekordy bufora nieoznaczone etykietami 'tagA' oraz 'tagC':
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(
- Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
- array('tagA', 'tagC')
- );
- ]]></programlisting>
- <para>
- Jeśli chcesz usunąć rekordy bufora oznaczone etykietami 'tagA' lub 'tagC':
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(
- Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
- array('tagA', 'tagC')
- );
- ]]></programlisting>
- <para>
- Dostępne tryby czyszczenia bufora to: <constant>CLEANING_MODE_ALL</constant>,
- <constant>CLEANING_MODE_OLD</constant>, <constant>CLEANING_MODE_MATCHING_TAG</constant>,
- <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> oraz
- <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Trzy ostatnie, jak
- nazwa wskazuje, mogą w operacji czyszczenia być użyte wraz z tablicą
- etykiet.
- </para>
- </sect2>
- </sect1>
|