| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.cache.introduction">
- <title>Wprowadzenie</title>
- <para>
- <classname>Zend_Cache</classname> zapewnia ogólny sposób buforowania danych.
- </para>
- <para>
- Buforowanie w Zend Framework jest przeprowadzane przez frontendy, a
- rekordy bufora są przechowywane za pomocą backendów (<emphasis>File</emphasis>,
- <emphasis>Sqlite</emphasis>, <emphasis>Memcache</emphasis>...) przy użyciu uniwersalnego
- systemu identyfikatorów ID oraz etykiet. Używając ich, łatwe jest
- kasowanie specyficznych typów rekordów (na przykład: "usuń wszystkie
- rekordy bufora oznaczone podaną etykietą").
- </para>
- <para>
- Jądro modułu (<classname>Zend_Cache_Core</classname>) jest proste, uniwersalne i
- konfigurowalne. Obecnie, dla twoich specyficznych potrzeb dostępne są
- frontendy rozszerzające <classname>Zend_Cache_Core</classname> na przykład:
- <emphasis>Output</emphasis>, <emphasis>File</emphasis>, <emphasis>Function</emphasis>
- oraz <emphasis>Class</emphasis>.
- </para>
- <example id="zend.cache.introduction.example-1">
- <title>Pobieranie frontendu za pomocą Zend_Cache::factory()</title>
- <para>
- <methodname>Zend_Cache::factory()</methodname> tworzy instancję odpowiedniego
- obiektu łączy je razem. W tym pierwszym przykładzie użyjemy
- frontendu <emphasis>Core</emphasis> wraz z backendem <emphasis>File</emphasis>.
- </para>
- <programlisting language="php"><![CDATA[
- $frontendOptions = array(
- 'lifetime' => 7200, // okres ważności bufora 2 godziny
- 'automatic_serialization' => true
- );
- $backendOptions = array(
- 'cache_dir' => './tmp/' // Katalog w którym mają być składowane pliku bufora
- );
- // pobieranie obiektu Zend_Cache_Core
- $cache = Zend_Cache::factory('Core',
- 'File',
- $frontendOptions,
- $backendOptions);
- ]]></programlisting>
- </example>
- <note>
- <title>Frontendy i backendy składające się z wielu słów</title>
- <para>
- Niektóre frontendy i backendy są nazwane przy użyciu wielu słów, na
- przykład 'ZendPlatform'. Gdy określamy ich nazwę w metodzie fabryki,
- oddzielamy wyrazy używając separatora wyrazów takiego jak spacja
- (' '), myślnik ('-') lub kropka ('.').
- </para>
- </note>
- <example id="zend.cache.introduction.example-2">
- <title>Buforowanie wyniku zapytania do bazy danych</title>
- <para>
- Teraz gdy mamy frontend, możemy buforować dowolny typ danych
- (włączyliśmy serializację). Na przykład, możemy buforować wynik
- bardzo obciążającego zapytania do bazy danych. Kiedy jest buforowane,
- nie ma nawet potrzeby aby łączyć się z bazą; rekordy są pobierane z
- bufora, a następnie odserializowane.
- </para>
- <programlisting language="php"><![CDATA[
- // obiekt $cache zainicjalizowany jak w poprzednim przykładzie
- // sprawdzamy czy bufor istnieje:
- if(!$result = $cache->load('myresult')) {
- // bufor nie istnieje; łączymy się z bazą
- $db = Zend_Db::factory( [...] );
- $result = $db->fetchAll('SELECT * FROM huge_table');
- $cache->save($result, 'myresult');
- } else {
- // bufor istnieje! dajmy o tym znać
- echo "To pochodzi z bufora!\n\n";
- }
- print_r($result);
- ]]></programlisting>
- </example>
- <example id="zend.cache.introduction.example-3">
- <title>Buforowanie danych wyjściowych przy użyciu frontendu <classname>Zend_Cache</classname></title>
- <para>
- Sekcje w których chcemy buforować dane wyjściowe oznaczamy dodając
- pewną warunkową logikę, ograniczającą sekcję za pomocą metod
- <methodname>start()</methodname> oraz <methodname>end()</methodname> (to odpowiada
- pierwszemu przykładowi i jest główną strategią buforowania).
- </para><para>
- Wewnątrz wyświetlaj dane jak zawsze - wszystkie dane wyjściowe będą
- buforowane aż do napotkania metody <methodname>end()</methodname>. Podczas
- następnego wywołania, cała sekcja będzie ominięta, a użyte zostaną
- dane z bufora. (tak długo jak rekord bufora jest prawidłowy).
- </para>
- <programlisting language="php"><![CDATA[
- $frontendOptions = array(
- 'lifetime' => 30, // okres ważności bufora 30 sekund
- 'automatic_serialization' => false // to i tak jest domyślna wartość
- );
- $backendOptions = array('cache_dir' => './tmp/');
- $cache = Zend_Cache::factory('Output',
- 'File',
- $frontendOptions,
- $backendOptions);
- // przekazujemy unikalny identyfikator do metody start()
- if(!$cache->start('mypage')) {
- // wyświetlamy jak zawsze:
- echo 'Witajcie! ';
- echo 'To jest buforowane ('.time().') ';
- $cache->end(); // dane wyjściowe są zapisywane i wysyłane do przeglądarki
- }
- echo 'To nie jest nigdy buforowane ('.time().').';
- ]]></programlisting>
- <para>
- Zauważ, że wyświetlamy rezultat funkcji <methodname>time()</methodname> dwa razy;
- jest to coś dynamicznego, aby zademenstrować przeznaczenie. Spróbuj
- uruchomić to i odświeżyć kilka razy; zauważysz, że pierwsza liczba
- się nie zmienia, a druga za każdym razem jest inna. Tak jest ponieważ
- pierwsza liczba była wyświetlona w sekcji buforowanej więc została
- zapisana. Po upływie pół minuty (ustawiliśmy okres ważności bufora na
- 30 sekund) powinny ponownie się zgadzać ponieważ bufor wygasł -- i
- został zapisany ponownie. Powinieneś to sprawdzić w swojej
- przeglądarce lub w konsoli.
- </para>
- </example>
- <note><para>
- Kiedy używasz Zend_Cache, zwracaj uwagę na ważny identyfikator bufora
- (przekazany do metod <methodname>save()</methodname> oraz <methodname>start()</methodname>).
- Musi być unikalny dla każdego zasobu, który buforujesz, inaczej nie
- powiązane buforowane rekordy mogą się nawzajem ścierać, lub gorzej,
- jeden może wyświetlić się w miejscu drugiego.
- </para></note>
- </sect1>
|