mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-09 09:36:56 +01:00
46 lines
3.6 KiB
Plaintext
46 lines
3.6 KiB
Plaintext
Кэширование динамического содержимого
|
||
===============
|
||
|
||
Когда мы используем [кэширование фрагментов](/doc/guide/caching.fragment) или
|
||
[кэширование страниц](/doc/guide/caching.page), то часто попадаем в ситуацию,
|
||
когда целые части содержимого на выходе относительно статичны, кроме одного
|
||
или нескольких мест. Например, страница помощи может отображать статичную
|
||
вспомогательную информацию наряду с именем авторизованного пользователя,
|
||
отображаемого вверху.
|
||
|
||
Для решения этой проблемы мы можем варьировать содержимое кэша в зависимости от
|
||
имени пользователя, но это было бы очень большой тратой драгоценного места
|
||
(на диске) для кэширования практически одинакового содержимого, кроме имени
|
||
пользователя. Мы также можем разделить страницу на несколько фрагментов и
|
||
кэшировать их по отдельности, но это усложняет наше представление и делает код
|
||
слишком сложным. Наилучший способ — использование возможности
|
||
*динамического содержимого*, обеспечиваемой классом [CController].
|
||
|
||
Динамическое содержимое означает фрагмент содержимого на выходе, который не
|
||
должен кэшироваться, даже если он включен в кэшированный фрагмент. Для
|
||
обеспечения динамичности содержимого, его нужно генерировать каждый раз, даже
|
||
если окружающий контент взят из кэша. Для решения этой задачи, нам требуется,
|
||
чтобы динамическое содержимое генерировалось некой функцией или методом.
|
||
|
||
Мы вызываем метод [CController::renderDynamic()] для вставки динамического
|
||
содержимого в нужное место.
|
||
|
||
~~~
|
||
[php]
|
||
…другое HTML-содержимое…
|
||
<?php if($this->beginCache($id)) { ?>
|
||
…фрагмент кэшируемого содержимого…
|
||
<?php $this->renderDynamic($callback); ?>
|
||
…фрагмент кэшируемого содержимого…
|
||
<?php $this->endCache(); } ?>
|
||
…другое HTML-содержимое…
|
||
~~~
|
||
|
||
В коде выше, `$callback` — это корректный обратный PHP-вызов. Это
|
||
может быть строка с именем метода текущего контроллера или глобальной функции.
|
||
Также это может быть массив, ссылающийся на метод класса. Любые дополнительные
|
||
параметры в методе [renderDynamic()|CController::renderDynamic()] должны быть
|
||
переданы обратному вызову. Обратный вызов должен не отображать динамическое
|
||
содержимое, а вернуть его.
|
||
|
||
<div class="revision">$Id: caching.dynamic.txt 163 2008-11-05 12:51:48Z weizhuo $</div> |