Наверх

Вечный кеш для чанков. Запрещаем удалять кеш даже по событию обновления сайта

Когда оптимизируешь сайт, понимаешь, что некоторые блоки обновляются очень-очень редко и хотелось бы такие блоки сгенерировать один раз, потом закешировать и так, чтобы даже при обновлении сайта их кеш не сбрасывался.

В статье Оптимизация сайта на MODX Revolution — уменьшение времени загрузки страницы есть сниппет chunk, который помогает закешировать блоки с первого отображения и вплоть до внесения изменений на сайт.

Сниппет longCache действует анологично, только создает кеш блока, который не очищается при каждом обновлении информации на сайте.

Вызываем его так:
[[longCache? &name=`foreignMap`]]
Код самого сниппета:
<?php
$chunk = $scriptProperties['name'];

if (empty($cacheKey)) $cacheKey = $modx->getOption(
    'cache_scripts_key', null, 'chunks');
if (empty($cacheHandler)) $cacheHandler = $modx->getOption(
    'cache_resource_handler', null,
    $modx->getOption(xPDO::OPT_CACHE_HANDLER, null, 'xPDOFileCache'));
if (!isset($cacheExpires)) $cacheExpires = (integer) $modx->getOption(
    'cache_resource_expires', null,
    $modx->getOption(xPDO::OPT_CACHE_EXPIRES, null, 0));
if (empty($cacheElementKey)) $cacheElementKey = $chunk;

$cacheOptions = array(
    xPDO::OPT_CACHE_KEY => $cacheKey,
    xPDO::OPT_CACHE_HANDLER => $cacheHandler,
    xPDO::OPT_CACHE_EXPIRES => $cacheExpires
);

if ($output = $modx->cacheManager->get($cacheElementKey, $cacheOptions)) {
    return $output;
}
$output = $modx->getChunk($chunk, $scriptProperties);

$modx->cacheManager->set($cacheElementKey, $output, $cacheExpires, $cacheOptions);
return $output;
Этот сниппет я использовал, чтобы закешировать карту на сайте reabilitaciya-narcozavisimyh.ru/ (статья о сайте)


2 комментария

  1. Владимир Гришин 30 июля 2013, 18:25(Комментарий был изменён) # 0
    а когда он обновляется? ручками удаляется?
    $chunk = $scriptProperties['name'];
    а вот по этому поводы ты вроде говорил что это лишнее)))
    if (empty($cacheKey)) $cacheKey = $modx->getOption(
        'cache_scripts_key', null, 'name');
    так нельзя?)
    1. Илья Уткин 30 июля 2013, 18:29(Комментарий был изменён) # 0
      Да, ручками.

      $cacheKey — здесь это имя папки внутри cache, в которую и будут складываться файлики кеша. У меня внутри /core/cache/ есть папка /chunks/, где и лежит кеш таких чанков (каждый чанк в отдельном файле).

    Авторизация

    через сервис Loginza:

    Подписка или RSS

    Буду присылать новые статьи — никакого спама



    Шаблоны MODX

    1 2 Дальше »

    Объектная
    модель
    MODX