Урок кеширования в MODx Revolution
Итак, допустим, вы сделали свой первый сайт на MODX Revolution. У него есть несколько сниппетов, плагинов, чанков, переменных шаблона и даже посетители. Теперь самое время занятся оптимизацией.
Оптимизация значит быстрее время загрузки и счастливые посетители
Оптимизация сайта – это большой комплекс действий направленный для улучшения сайта для посетителей. Одно из таких действий – это кеширование и об этом пойдёт речь в данном посте. Мозг взрывает мысль о том, что необходимо кешировать всё, что только возможно, чтобы ваш сайт на Revolution работал так хорошо, насколько это возможно. В сайте куча настроек, которые делают основную задачу по кешированию, но что по поводу тонких моментов?
Вступление в getCache
GetCache это Revolution сниппет, разработанный Дж.Ковардом, и, согласно документации, является :
Общим кеширующим сниппетом для кеширования вывода любых MODx элементов используя конфигурируемый обработчик кеша.
Настоящим достоинствам его является возможность кеширования всего что только угодно (Но не это не значит, что так нужно делать).
Предположим у вас есть твиттер фид на вашем сайте, вы его сделали используя сниппет get feed. Как часто вам действительно нужно обновлять данный фид? Кеширование, которое будет делать сниппет getCache, сэкономит много вычислительных ресурсов. Согласно того, как об этом говорит Дж.Ковард в своём блоге,
«Кажется всего делов-то кешировать вызов этого сниппета раз в 20 минут, но если вы получаете 100 запросов за секунду или больше, то вы не захотите, чтобы каждый запрос выполнял вызов; в этом просто нет никакого смысла…»
Как же мы будем организовывать микрокеширование с помощью getCache?
Проще простого, мои друзья. Возьмем вызов нашего сниппета getFeed для примера, я изменил его с:
на:
Обратите внимание на параметр cacheExpires. Он считает число секунд, на протяжение которых сниппет будет оставатся в кеше. Вы можете использовать данную технику в чанках и сниппетах на всём вашем сайте используя вашу стратегию кеширования.
Стратегия кеширования?
Да, именно, вам она нужна. Вам нужно сесть и спланировать какие элементы могут и не могут быть кешированы. И далее на какое время. И после того, как вы закончите со стратегией кеширования, выполните её. Вы можете прочитать больше по этому вопросу в посте о стратегии кеширования.
Результаты?
Быстрее время загрузки, меньше обработки, счастливые посетители сайта и счастливые клиенты. Отчасти, я хотел бы упомянуть о том, что не являюсь экспертом в области кеширования, а узнал об этом приёме, пытаясь сделать один из моих сайтов чуточку быстрее. Надеюсь знания, которыми я здесь с вами поделился, сэкономят новичкам пару часов их времени.
Следующей моей задачей будет научится как кешировать миниизображения для сниппета Gallery.
Вы можете взять getCache здесь или установить его через менеджер вашего сайта.
Чтобы проверить работу getCache, давайте создадим небольшой сниппет time:
return strftime('%X');
Далее выведите на странице:
resource cached at:
time last cached at:
current time is:
Так же как и твитер-фид вы можете кешировать результат работы любого кешируемого сниппета, например, в случае с getResources будет следующий вызов:
Другие полезные дополнения:
- statcache запись всего кеша в статические файлы.
- modx-uncacher кеширует только новый или сохраняемый ресурс, работа по CRON
Valentin
18.01.2012 12:58Отличный урок!!!!
Lola
20.01.2012 19:27А каковы объективные критерии эффективности кэширования? Быстрее - медленнее не очень ясно. Как и чем измерить результаты своих усилий по оптимизации сайта. Ведь Гуггл сейчас обращает внимание на скорость загрузки страниц сайта. Но важна не только скорость загрузки, но и нагрузка на сервер, Как быть с ней?
MODx Revolution
23.01.2012 20:22Объективно - время загрузки. Можно измерить с помощью Page speed расширения Chrome браузера.
Нагрузку на сервер смотрите в своей панели управления сайтом, которую вам предоставил ваш хостер. У меня проблем с нагрузкой на сервер пока не возникало...
Раньше на сайте был твиттер фид, но его работа тормозила загрузку сайта, из-за чего его убрал. Сейчас, используя данный сниппет, можно снова показать фид без существенной потери в производительности сайта. Сделаю это после переделки дизайна...
Lola
23.01.2012 20:37Посмотреть нагрузку на процессор конечно можно. Но что же сидеть целый час и создавать ее? Не эффективно. Да и не отражает ситуацию в реале, ведь пользователи могут прийти и создать 50 запросов в течение 2-3 минут, разве можно это симитировать без соответствующего скрипта, как на Bitrix?
Viktorminator
23.01.2012 22:15"Но что же сидеть целый час и создавать ее?" нет.
"разве можно это симитировать без соответствующего скрипта, как на Bitrix?" не знаю.
Идея статьи в том, чтобы "ускорить время загрузки сайта", а не "уменьшить нагрузку на сервер".
Lola
24.01.2012 06:46Виктор! Напишите тогда другую статью. О работоспособности движка при больших на него нагрузках пользователей. На что можно рассчитывать? Ведь после продвижения на сайт придут тысячи посетителей и что будет тогда с нашим сайтом? Падет или не падет? Вот в чем вопрос.:)
Viktorminator
24.01.2012 08:57Не боритесь с ветряными мельницами, а занимайтесь реальными текущими задачами, как-то привлечение этой тысячи посетителей. Если придут тысячи в день, то (я уверен в этом) сайт на модексе выдержит, может не выдержать хостинг, тогда либо VDS, либо смена хостера.
Jsn
29.01.2012 15:52Хороший сниппет! Вот только вопросик маленький (небольшое уточнение):
Как известно при каждом сохранении определенных ресурсов сам движок осуществляет обновление кэша всего сайта, так вот вопрос в том будет ли происходить обновление кэша в котором находятся результаты того-же getFeed даже если не прошел указанный в getCashe период времени?