30 марта 2011

Экстра кэширование для Concrete5


Всем привет!

Хочу представить Вашему вниманию вольный перевод статьи "An extra cache for Concrete5".

Итак начнем...

Я большой фанат Concrete5. Эта система невероятно мощная, гибкая, легкая для разработчика и особенно проста для конечного пользователя. Тем не менее, иногда она бывает весьма "тяжелой" для сервера и я решил придумать простейший кэш для нее (Кэширование уже присутствует в Concrete5, однако это дополнительный, настраиваемый легковесный кэш - прим. Count Raven Amiant). Многие сайты по сути своей весьма статичны, поэтому этот дополнительный кэш предназначен для того, чтобы сделать Concrete5 настолько статичной, насколько это возможно.

Принципы данного кэша основываются на следующих моментах:
  • Если нет смысла обновлять страницу, то кэшированая копия может храниться бесконечно долго. Большинство моих сайтов довольно статичны.
  • Если кто-то осуществляет GET или POST запрос - не кэшировать их вообще.
  • Проверить, авторизован ли пользователь. Если пользователь авторизовался на сайте - отключить кэширование.

Как установить?

Сначала скачайте и распакуйте ZIP-архив. Положите папку bootstrapcache из архива в папку libraries в корневой папке Concrete5.

Замените файл dispatcher.php в папке /concrete аналогичным файлом из архива. В этом файле я переместил чуть раньше управление сессией и добавил одну строку кода, чтобы интегрировать кэш.

Теперь кэш уже работает, но вы должны включить режим отладки, чтобы проверить это.

Дальнейшая конфигурация

Конфигурация по-умолчанию прекрасно работает, однако следует отредактировать файл site.php в папке /config чтобы задать дополнительные параметры конфигурации кэша. Здесь можно включить/выключить кэширование, режим отладки, создать исключения и определить как индивидуальное так и общее время хранения кэшированных страниц.


// включение/выключение кэша
define('BOOTSTRAPCACHE', true);
// включение/выключение режима показа отладочного сообщения
define('BOOTSTRAPCACHE_DEBUG', true);

// установка времени хранения кэша по-умолчанию, null подразумевает бесконечное время хранения
define('BOOTSTRAPCACHE_DEFAULT_CACHE_TIME', null);

// в этот массив добавляем страницы, которые никогда не должны кэшироваться
define('BOOTSTRAPCACHE_EXCLUDED_PAGES',  serialize(array(
'/index.php/login/',
'/index.php/login/do_login/'
)));

// если вы хотите назначить различное время хранения кэша для отдельных страниц,
// добавьте эти страницы сюда, например:
define('BOOTSTRAPCACHE_CACHE_TIME_SPECIFICS',  serialize(array(
    '/weather/'=>600
)));

Несколько замечаний
  • Имейте ввиду, что "родное" кэширование Concrete5 должно быть отключено.
  • Страницы, на которых находится динамический контент, например RSS-лента, должны быть добавлены в массив BOOTSTRAPCACHE_CACHE_TIME_SPECIFICS, где необходимо назначить им отдельное время кэширования.
  • Было бы замечательно не трогать файлы в ядре Concrete5, но view.php должен быть переопределен, а dispatcher.php отредактирован. Иного пути нет. Будьте внимательны, если в будущем будете обновлять библиотеки ядра Concrete5.
  • На данный момент кэширование работает только для так называемых "красивых ссылок", т.е. для тех, которые выглядят как http://www.site.ru/page/, а не как http://www.site.ru/index.php?cID=51 и подобные.
  • Кэш не поддерживает CSS и JavaScript, которые подключаются через index.php. Поэтому внутри шаблона не используйте функцию getStylesheet, вместо нее используйте getThemePath и подключайте необходимые ресурсы напрямую (как описано здесь).
  • Это очень сырой код, поэтому тщательно тестируйте все, прежде, чем положить его на работающий сайт. Я буду обновлять его, если найду проблемы в работе.


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

Сайт автора оригинала статьи (англ.): MESUVA Web Development

А теперь ссылка для тех, кто хочет качественные пластиковые окна - заказать пластиковые окна!


Комментариев нет:

Отправить комментарий