Кэширование
MV позволяет кэшировать данные для быстрого извлечения. Обычно кэшируются фрагменты кода, полученные в результате большого количества SQL запросов и затрат на обработку данных. Например, можно кэшировать большие вложенные меню, либо списки элементов, в которых выстроены сложные связи между многими таблицами. В результате фрагмент кода сохраняется в базе данных, и для его извлечения требуется всего 1 запрос, вместо многих запросов, потраченных на его первичную генерацию.
Для включения возможности кэширования необходимо поставить опци. 'EnableCache' в значение true в файле config/setup.php.
Кэширование результата работы метода
Предположим в модели Catalogs имеется метод displayLeftCatalogMenu(), который отображает дерево категорий и использует на это много SQL запросов. Необходимо закэшировать результат метода в шаблоне для ускорения генерации страницы. Очищать кэш нужно только при изменениях в модели Catalogs. Модифицируем код в шаблоне, отвечающий за отображение каталога.
//До кэширования <ul id="catalog-menu-list"> <? echo $mv -> catalogs -> displayLeftCatalogMenu(); ?> </ul> //После применения кэширования <ul id="catalog-menu-list"> <? if(!$mv -> cache -> findAndDisplay("catalog-menu")) echo $mv -> cache -> save("catalog-menu", $mv -> catalogs -> displayLeftCatalogMenu(), array("catalogs")); ?> </ul>
Кэширование фрагмента шаблона с HTML и PHP кодом
//До кэширования <div id="bottom-block"> <? echo $mv -> blocks -> display(); ?> <div class="catalog"> <? echo $mv -> catalogs -> displayMainMenu(); ?> </div> <? echo $mv -> pages-> displayMenu(); ?> </div> //После применения кэширования <? if(!$mv -> cache -> displayOrStart("footer")) { ?> <div id="bottom-block"> <? echo $mv -> blocks -> display(); ?> <div class="catalog"> <? echo $mv -> catalogs -> displayMainMenu(); ?> </div> <? echo $mv -> pages-> displayMenu(); ?> </div> <? } $mv -> cache -> stopAndSave(array("blocks", "catalogs", "pages")); ?>
Примечания
- Проследить эффективность кэширования можно по количеству SQL запросов и времени генерации страницы. Для отображения такого отчета необходимо в корневом файле index.php поставить значение 1 в нулевой аргумент при создании объекта $debug, как описано в разделе Отладка. Отчет появляется внизу сгенерированной страницы.
- Данные кэширования хранятся в базе данных в таблицах cache и cache_clean, которые могут быть очищены в любой момент без ущерба для работы проекта. Также кэш можно сбросить статическим методом Cache :: cleanAll().
- Если в методы save() и stopAndSave() не передавать массив с моделями, то MV будет сбрасывать кэш по заданному ключу при любой операции с любой записью в любой модели.
- В объекте $mv -> cache есть методы cleanByKey($key) и cleanByModel($model) для очистки кэша по ключу или названию модели, за которой он закреплен.
- Значение опции 'EnableCache', выставленное в false полностью останавливает сохранения и отдачу данных из кэша.
Предыдущий раздел
AJAX