При создании сайтов часто сталкиваюсь с ситуацией, когда страницы сайта отличаются только содержанием, а все остальные блоки, такие как сайдбар, шапка, футер и прочие — содержат информацию, которая идентична для всех страниц сайта.
Возникает вопрос: для чего эти блоки повторно генерировать каждый раз при серфинге по страницам сайта? Логичнее было бы сгенерировать их раз, закешировать вывод и после этого просто выводить из кеша при запросе.
Замечательное, на мой взгляд решение этого вопроса было предложено Ильей Уткиным уже давненько, но которым переодически я пользуюсь и сейчас.
Создаем новый сниппет chunk:
<?php
$cache_key = "chunk_".$name;
$output = $modx->cacheManager->get($cache_key);
if (empty($output)) {
$output = $modx->getChunk($name, $scriptProperties);
$modx->cacheManager->set($cache_key,$output);
}
return $output;
После чего вызовы чанков, которые хотим закешировать, заменим вызовом нашего сниппета. Например:
[[$header]] <!-- → --> [[chunk? &name=`header`]]
[[$footer]] <!-- → --> [[chunk? &name=`footer`]]
Единственное замечание к такому решению вопроса, то что он не является универсальным - то есть, если у вас присутствует в блоках какая-либо логика она работать перестанет.
Поэтому, используйте аккуратно и обязательно проверяйте результат на корректность работы.
Найти сгенерированный сниппетом кеш можно в папке /core/cache/default/
— по одному файлу для каждого чанка.
На этом все.