Zend_Cache-Introduction.xml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="zend.cache.introduction">
  4. <title>Wprowadzenie</title>
  5. <para>
  6. <classname>Zend_Cache</classname> zapewnia ogólny sposób buforowania danych.
  7. </para>
  8. <para>
  9. Buforowanie w Zend Framework jest przeprowadzane przez frontendy, a
  10. rekordy bufora są przechowywane za pomocą backendów (<emphasis>File</emphasis>,
  11. <emphasis>Sqlite</emphasis>, <emphasis>Memcache</emphasis>...) przy użyciu uniwersalnego
  12. systemu identyfikatorów ID oraz etykiet. Używając ich, łatwe jest
  13. kasowanie specyficznych typów rekordów (na przykład: "usuń wszystkie
  14. rekordy bufora oznaczone podaną etykietą").
  15. </para>
  16. <para>
  17. Jądro modułu (<classname>Zend_Cache_Core</classname>) jest proste, uniwersalne i
  18. konfigurowalne. Obecnie, dla twoich specyficznych potrzeb dostępne są
  19. frontendy rozszerzające <classname>Zend_Cache_Core</classname> na przykład:
  20. <emphasis>Output</emphasis>, <emphasis>File</emphasis>, <emphasis>Function</emphasis>
  21. oraz <emphasis>Class</emphasis>.
  22. </para>
  23. <example id="zend.cache.introduction.example-1">
  24. <title>Pobieranie frontendu za pomocą Zend_Cache::factory()</title>
  25. <para>
  26. <methodname>Zend_Cache::factory()</methodname> tworzy instancję odpowiedniego
  27. obiektu łączy je razem. W tym pierwszym przykładzie użyjemy
  28. frontendu <emphasis>Core</emphasis> wraz z backendem <emphasis>File</emphasis>.
  29. </para>
  30. <programlisting language="php"><![CDATA[
  31. $frontendOptions = array(
  32. 'lifetime' => 7200, // okres ważności bufora 2 godziny
  33. 'automatic_serialization' => true
  34. );
  35. $backendOptions = array(
  36. 'cache_dir' => './tmp/' // Katalog w którym mają być składowane pliku bufora
  37. );
  38. // pobieranie obiektu Zend_Cache_Core
  39. $cache = Zend_Cache::factory('Core',
  40. 'File',
  41. $frontendOptions,
  42. $backendOptions);
  43. ]]></programlisting>
  44. </example>
  45. <note>
  46. <title>Frontendy i backendy składające się z wielu słów</title>
  47. <para>
  48. Niektóre frontendy i backendy są nazwane przy użyciu wielu słów, na
  49. przykład 'ZendPlatform'. Gdy określamy ich nazwę w metodzie fabryki,
  50. oddzielamy wyrazy używając separatora wyrazów takiego jak spacja
  51. (' '), myślnik ('-') lub kropka ('.').
  52. </para>
  53. </note>
  54. <example id="zend.cache.introduction.example-2">
  55. <title>Buforowanie wyniku zapytania do bazy danych</title>
  56. <para>
  57. Teraz gdy mamy frontend, możemy buforować dowolny typ danych
  58. (włączyliśmy serializację). Na przykład, możemy buforować wynik
  59. bardzo obciążającego zapytania do bazy danych. Kiedy jest buforowane,
  60. nie ma nawet potrzeby aby łączyć się z bazą; rekordy są pobierane z
  61. bufora, a następnie odserializowane.
  62. </para>
  63. <programlisting language="php"><![CDATA[
  64. // obiekt $cache zainicjalizowany jak w poprzednim przykładzie
  65. // sprawdzamy czy bufor istnieje:
  66. if(!$result = $cache->load('myresult')) {
  67. // bufor nie istnieje; łączymy się z bazą
  68. $db = Zend_Db::factory( [...] );
  69. $result = $db->fetchAll('SELECT * FROM huge_table');
  70. $cache->save($result, 'myresult');
  71. } else {
  72. // bufor istnieje! dajmy o tym znać
  73. echo "To pochodzi z bufora!\n\n";
  74. }
  75. print_r($result);
  76. ]]></programlisting>
  77. </example>
  78. <example id="zend.cache.introduction.example-3">
  79. <title>Buforowanie danych wyjściowych przy użyciu frontendu <classname>Zend_Cache</classname></title>
  80. <para>
  81. Sekcje w których chcemy buforować dane wyjściowe oznaczamy dodając
  82. pewną warunkową logikę, ograniczającą sekcję za pomocą metod
  83. <methodname>start()</methodname> oraz <methodname>end()</methodname> (to odpowiada
  84. pierwszemu przykładowi i jest główną strategią buforowania).
  85. </para><para>
  86. Wewnątrz wyświetlaj dane jak zawsze - wszystkie dane wyjściowe będą
  87. buforowane aż do napotkania metody <methodname>end()</methodname>. Podczas
  88. następnego wywołania, cała sekcja będzie ominięta, a użyte zostaną
  89. dane z bufora. (tak długo jak rekord bufora jest prawidłowy).
  90. </para>
  91. <programlisting language="php"><![CDATA[
  92. $frontendOptions = array(
  93. 'lifetime' => 30, // okres ważności bufora 30 sekund
  94. 'automatic_serialization' => false // to i tak jest domyślna wartość
  95. );
  96. $backendOptions = array('cache_dir' => './tmp/');
  97. $cache = Zend_Cache::factory('Output',
  98. 'File',
  99. $frontendOptions,
  100. $backendOptions);
  101. // przekazujemy unikalny identyfikator do metody start()
  102. if(!$cache->start('mypage')) {
  103. // wyświetlamy jak zawsze:
  104. echo 'Witajcie! ';
  105. echo 'To jest buforowane ('.time().') ';
  106. $cache->end(); // dane wyjściowe są zapisywane i wysyłane do przeglądarki
  107. }
  108. echo 'To nie jest nigdy buforowane ('.time().').';
  109. ]]></programlisting>
  110. <para>
  111. Zauważ, że wyświetlamy rezultat funkcji <methodname>time()</methodname> dwa razy;
  112. jest to coś dynamicznego, aby zademenstrować przeznaczenie. Spróbuj
  113. uruchomić to i odświeżyć kilka razy; zauważysz, że pierwsza liczba
  114. się nie zmienia, a druga za każdym razem jest inna. Tak jest ponieważ
  115. pierwsza liczba była wyświetlona w sekcji buforowanej więc została
  116. zapisana. Po upływie pół minuty (ustawiliśmy okres ważności bufora na
  117. 30 sekund) powinny ponownie się zgadzać ponieważ bufor wygasł -- i
  118. został zapisany ponownie. Powinieneś to sprawdzić w swojej
  119. przeglądarce lub w konsoli.
  120. </para>
  121. </example>
  122. <note><para>
  123. Kiedy używasz Zend_Cache, zwracaj uwagę na ważny identyfikator bufora
  124. (przekazany do metod <methodname>save()</methodname> oraz <methodname>start()</methodname>).
  125. Musi być unikalny dla każdego zasobu, który buforujesz, inaczej nie
  126. powiązane buforowane rekordy mogą się nawzajem ścierać, lub gorzej,
  127. jeden może wyświetlić się w miejscu drugiego.
  128. </para></note>
  129. </sect1>