Просмотр файла manual-ru/caching.html

Размер файла: 13.25Kb
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. <title>Chapter 14. Кэширование</title>
  5. <meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
  6. <link rel="home" href="index.html" title="Руководство по Smarty">
  7. <link rel="up" href="smarty.for.programmers.html" title="Part III. Smarty для программистов">
  8. <link rel="prev" href="api.unregister.resource.html" title="unregister_resource">
  9. <link rel="next" href="caching.multiple.caches.html" title="Множественное кэширование страниц">
  10. </head>
  11. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  12. <div class="navheader">
  13. <table width="100%" summary="Navigation header">
  14. <tr><th colspan="3" align="center">Chapter 14. Кэширование</th></tr>
  15. <tr>
  16. <td width="20%" align="left">
  17. <a accesskey="p" href="api.unregister.resource.html">Prev</a> </td>
  18. <th width="60%" align="center">Part III. Smarty для программистов</th>
  19. <td width="20%" align="right"> <a accesskey="n" href="caching.multiple.caches.html">Next</a>
  20. </td>
  21. </tr>
  22. </table>
  23. <hr>
  24. </div>
  25. <div class="chapter" title="Chapter 14. Кэширование">
  26. <div class="titlepage"><div><div><h2 class="title">
  27. <a name="caching"></a>Chapter 14. Кэширование</h2></div></div></div>
  28. <div class="toc">
  29. <p><b>Table of Contents</b></p>
  30. <dl>
  31. <dt><span class="sect1"><a href="caching.html#caching.setting.up">Настройка кэширования</a></span></dt>
  32. <dt><span class="sect1"><a href="caching.multiple.caches.html">Множественное кэширование страниц</a></span></dt>
  33. <dt><span class="sect1"><a href="caching.groups.html">Групповое кэширование</a></span></dt>
  34. <dt><span class="sect1"><a href="caching.cacheable.html">Управление кэшированием результатов работы плагинов</a></span></dt>
  35. </dl>
  36. </div>
  37. <p>
  38. Кэширование используется для ускорения вызовов <a class="link" href="api.display.html" title="display()">display()</a> или <a class="link" href="api.fetch.html" title="fetch">fetch()</a> при помощи сохранения результатов
  39. их работы в файл. Если доступна кэшированная версия вызова, она отображается
  40. вместо повторной обработки шаблона. Кэширование может значительно ускорить
  41. работу, особенно в случае длительно обрабатываемых шаблонов.
  42. Так как результат работы методов <a class="link" href="api.display.html" title="display()">display()</a> или <a class="link" href="api.fetch.html" title="fetch">fetch()</a> кэшируется, один файл кэша вполне может
  43. состоять из нескольких файлов шаблонов, конфигурационных файлов и т.д.
  44. </p>
  45. <p>
  46. Так как шаблоны динамичны, очень важно быть осторожным относительно того,
  47. что вы кэшируете и на какой период. Например, если вы отображаете главную
  48. страницу вашего сайта, которая меняет своё содержимое достаточно редко,
  49. хорошей идеей может быть кэширование этой страницы на час и более.
  50. С другой стороны, если вы отображаете страницу с картой погоды, которая
  51. обновляется ежеминутно, смысла в кэшировании этой страницы нет.
  52. </p>
  53. <div class="sect1" title="Настройка кэширования">
  54. <div class="titlepage"><div><div><h2 class="title" style="clear: both">
  55. <a name="caching.setting.up"></a>Настройка кэширования</h2></div></div></div>
  56. <p>
  57. Прежде всего, кэширование необходимо активировать. Это можно сделать,
  58. установив <a class="link" href="variable.caching.html" title="$caching">$caching</a> = true (или 1).
  59. </p>
  60. <div class="example">
  61. <a name="id2732142"></a><p class="title"><b>Example 14.1. Включение кэширования</b></p>
  62. <div class="example-contents"><pre class="programlisting">
  63.  
  64. require('Smarty.class.php');
  65. $smarty = new Smarty;
  66.  
  67. $smarty-&gt;caching = true;
  68.  
  69. $smarty-&gt;display('index.tpl');
  70.  
  71. </pre></div>
  72. </div>
  73. <br class="example-break"><p>
  74. При включенном кэшировании, вызываемая функция display('index.tpl') интерпретирует
  75. шаблон как обычно, но также сохраняет копию вывода в файл (кэшированую копию)
  76. в <a class="link" href="variable.cache.dir.html" title="$cache_dir">$cache_dir</a>.
  77. При следующем вызове display('index.tpl'), вместо повторной интерпретации шаблона,
  78. будет использована кешированая копия.
  79. </p>
  80. <div class="note" title="Техническое замечание" style="margin-left: 0.5in; margin-right: 0.5in;">
  81. <h3 class="title">Техническое замечание</h3>
  82. <p>
  83. Файлы в директории $cache_dir имеют те же имена, что и соответствующие
  84. шаблоны. Их имена оканчиваются расширением ".php", но на самом деле они не являются
  85. выполняемыми php-скриптами. Не редактируйте эти файлы!
  86. </p>
  87. </div>
  88. <p>
  89. Каждая кэшированая страничка существует на протяжении определенного времени,
  90. указанного в <a class="link" href="variable.cache.lifetime.html" title="$cache_lifetime">$cache_lifetime</a>.
  91. Значение по умолчанию равно 3600 секундам или 1 часу. После того, как это время
  92. истекает, кэш обновляется. Существует возможность присвоить каждой
  93. кэшированой страничке собственное время жизни, установив $caching = 2.
  94. Смотрите документацию <a class="link" href="variable.cache.lifetime.html" title="$cache_lifetime">$cache_lifetime</a>
  95. для получения подробных сведений.
  96. </p>
  97. <div class="example">
  98. <a name="id2732858"></a><p class="title"><b>Example 14.2. Установка собственного cache_lifetime для кэшированой копии</b></p>
  99. <div class="example-contents"><pre class="programlisting">
  100.  
  101. require('Smarty.class.php');
  102. $smarty = new Smarty;
  103.  
  104. $smarty-&gt;caching = 2; // Срок действия только для этой копии
  105.  
  106. // устанавливаем cache_lifetime для index.tpl в 5 минут
  107. $smarty-&gt;cache_lifetime = 300;
  108. $smarty-&gt;display('index.tpl');
  109.  
  110. // устанавливаем cache_lifetime для home.tpl в 1 час
  111. $smarty-&gt;cache_lifetime = 3600;
  112. $smarty-&gt;display('home.tpl');
  113.  
  114. // Примечание: следующая $cache_lifetime настройка не будет работать, когда $caching = 2.
  115. // Срок жизни кэша для home.tpl уже был установлен
  116. // в 1 час, и Smarty больше не будет обращать внимание на значение $cache_lifetime.
  117. // Время жизни кэша home.tpl по прежнему будет истекать по прошествию одного часа.
  118. $smarty-&gt;cache_lifetime = 30; // 30 секунд
  119. $smarty-&gt;display('home.tpl');
  120.  
  121. </pre></div>
  122. </div>
  123. <br class="example-break"><p>
  124. Если включен параметр <a class="link" href="variable.compile.check.html" title="$compile_check">$compile_check</a>,
  125. то каждый файл шаблона и конфигурации, связанный с файлом кэша, проверяется на
  126. наличие изменений. Если один из этих файлов был модифицирован с тех пор, как
  127. кэш был создан, кэш немедленно обновляется. Это незначительно повышает нагрузку,
  128. поэтому, для оптимальной производительности оставьте значение $compile_check
  129. равным false.
  130. </p>
  131. <div class="example">
  132. <a name="id2732894"></a><p class="title"><b>Example 14.3. Включение $compile_check</b></p>
  133. <div class="example-contents"><pre class="programlisting">
  134.  
  135. require('Smarty.class.php');
  136. $smarty = new Smarty;
  137.  
  138. $smarty-&gt;caching = true;
  139. $smarty-&gt;compile_check = true;
  140.  
  141. $smarty-&gt;display('index.tpl');
  142.  
  143. </pre></div>
  144. </div>
  145. <br class="example-break"><p>
  146. Если <a class="link" href="variable.force.compile.html" title="$force_compile">$force_compile</a>
  147. активирован, файлы кэша всегда будут обновляться. Это средство можно
  148. использовать для отключения кэширования во время отладки.
  149. $force_compile обычно используется только в целях отладки, так как более
  150. правильным способом отключения кеширования является установка
  151. <a class="link" href="variable.caching.html" title="$caching">$caching</a> = false (или 0).
  152. </p>
  153. <p>
  154. Функция <a class="link" href="api.is.cached.html" title="is_cached">is_cached()</a> может быть
  155. использована для определения, имеется ли у шаблона работоспособный кэш.
  156. Если у вас есть кэшированый шаблон, которому необходимо, например,
  157. получить выборку из базы данных, вы можете использовать эту функцию,
  158. чтобы пропустить процесс обращения к базе.
  159. </p>
  160. <div class="example">
  161. <a name="id2732995"></a><p class="title"><b>Example 14.4. Использование is_cached()</b></p>
  162. <div class="example-contents"><pre class="programlisting">
  163.  
  164. require('Smarty.class.php');
  165. $smarty = new Smarty;
  166.  
  167. $smarty-&gt;caching = true;
  168.  
  169. if(!$smarty-&gt;is_cached('index.tpl')) {
  170. // Кэш отсутствует, значит присваеваем значения переменным.
  171. $contents = get_database_contents();
  172. $smarty-&gt;assign($contents);
  173. }
  174.  
  175. $smarty-&gt;display('index.tpl');
  176.  
  177. </pre></div>
  178. </div>
  179. <br class="example-break"><p>
  180. Вы можете сделать так, чтобы часть страницы оставалась динамической, даже
  181. если страница кэшируется, при помощи встроенной функции <a class="link" href="language.function.insert.html" title="{insert}">insert</a>. Например,
  182. кэшироваться может вся страница, за исключением баннера.
  183. Используя функцию insert для баннера, вы можете сохранять
  184. этот элемент динамичным, внутри кэшированой странички. Смотрите
  185. документацию по <a class="link" href="language.function.insert.html" title="{insert}">insert</a> для
  186. получения подробностей и примеров.
  187. </p>
  188. <p>
  189. Очистить все файлы кэша можно при помощи функции
  190. <a class="link" href="api.clear.all.cache.html" title="clear_all_cache()">clear_all_cache()</a>, а
  191. конкретный файл кэша (или группу) - вызвав
  192. <a class="link" href="api.clear.cache.html" title="clear_cache()">clear_cache()</a> функцию.
  193. </p>
  194. <div class="example">
  195. <a name="id2733082"></a><p class="title"><b>Example 14.5. Очистка кэша</b></p>
  196. <div class="example-contents"><pre class="programlisting">
  197.  
  198. require('Smarty.class.php');
  199. $smarty = new Smarty;
  200.  
  201. $smarty-&gt;caching = true;
  202.  
  203. // очищаем все файлы кэша
  204. $smarty-&gt;clear_all_cache();
  205.  
  206. // очищаем только кэш шаблона index.tpl
  207. $smarty-&gt;clear_cache('index.tpl');
  208.  
  209. $smarty-&gt;display('index.tpl');
  210.  
  211. </pre></div>
  212. </div>
  213. <br class="example-break">
  214. </div>
  215. </div>
  216. <div class="navfooter">
  217. <hr>
  218. <table width="100%" summary="Navigation footer">
  219. <tr>
  220. <td width="40%" align="left">
  221. <a accesskey="p" href="api.unregister.resource.html">Prev</a> </td>
  222. <td width="20%" align="center"><a accesskey="u" href="smarty.for.programmers.html">Up</a></td>
  223. <td width="40%" align="right"> <a accesskey="n" href="caching.multiple.caches.html">Next</a>
  224. </td>
  225. </tr>
  226. <tr>
  227. <td width="40%" align="left" valign="top">unregister_resource </td>
  228. <td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
  229. <td width="40%" align="right" valign="top"> Множественное кэширование страниц</td>
  230. </tr>
  231. </table>
  232. </div>
  233. </body>
  234. </html>