Правильная настройка кеширования в MODX Revolution

Итак, допустим, вы сделали свой первый сайт на MODX Revolution. У него есть несколько сниппетов, плагинов, чанков, переменных шаблона и даже посетители. Теперь самое время занятся оптимизацией.

Оптимизация значит быстрее время загрузки и счастливые посетители

Оптимизация сайта – это большой комплекс действий направленный для улучшения сайта для посетителей. Одно из таких действий – это кеширование и об этом пойдёт речь в данном посте. Мозг взрывает мысль о том, что необходимо кешировать всё, что только возможно, чтобы ваш сайт на Revolution работал так хорошо, насколько это возможно. В сайте куча настроек, которые делают основную задачу по кешированию, но что по поводу тонких моментов?

Вступление в getCache

GetCache это Revolution сниппет, разработанный Дж.Ковардом, и, согласно документации, является :

Общим кеширующим сниппетом для кеширования вывода любых MODx элементов используя конфигурируемый  обработчик кеша.

Настоящим достоинствам его является возможность кеширования всего что только угодно (Но не это не значит, что так нужно делать).

Предположим у вас есть твиттер фид на вашем сайте, вы его сделали используя  сниппет  get feed. Как часто вам действительно нужно обновлять данный фид? Кеширование, которое будет делать сниппет getCache, сэкономит много вычислительных ресурсов.  Согласно того, как об этом говорит Дж.Ковард в своём блоге,

«Кажется всего делов-то кешировать вызов этого сниппета раз в 20 минут, но если вы получаете 100 запросов за секунду или больше, то вы не захотите, чтобы каждый запрос выполнял вызов; в этом просто нет никакого смысла…»

Как же мы будем организовывать микрокеширование с помощью getCache?

Проще простого, мои друзья. Возьмем вызов нашего сниппета getFeed для примера, я изменил его с:

Код
[[getFeed` &url=`http://twitter.com/statuses/user_timeline/1130xxxxx.rss` &tpl=`twitterFeedTpl` &limit=`3` ]]

на:

Код
[[!getCache? &element=`getFeed` &cacheExpires=`1800` &url=`http://twitter.com/statuses/user_timeline/1130xxxxx.rss` &tpl=`twitterFeedTpl` &limit=`3` ]] 

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

Стратегия кеширования?

Да, именно, вам она нужна. Вам нужно сесть и спланировать какие элементы могут и не могут быть кешированы. И далее на какое время. И после того, как вы закончите со стратегией кеширования, выполните её. 

Результаты?

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

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

Вы можете взять getCache здесь  или установить его через менеджер вашего сайта.

Чтобы проверить работу getCache, давайте создадим небольшой сниппет time:

 return strftime('%X');

Далее выведите на странице:

Код
resource cached at: [[!getCache? &element=`time`]] time last cached at: [[!getCache? &element=`time` &cacheExpires=`10`]] current time is: [[!time]]

Так же как и твитер-фид вы можете кешировать результат работы любого кешируемого сниппета, например, в случае с getResources будет следующий вызов:

Код
[[!getCache? &element=`getResources` &cacheExpires=`1200` &parents=`4` &tpl=`getResourcesTpl` ]]

It's All!

4113