Кэширование элементов в ZoomX
Давненько я ничего не писал. С Нового года устроился на работу, чтобы набраться нового опыта — распределённые системы и т.п. (микросервисы, очереди, контейнеры). Всё это очень интересно и является трендом современной разработки. Но эта работа отнимает всё время. Поэтому личные планы на этот год придётся пересматривать. Хотя в любую минуту всё может измениться. Ладно, давайте вернёмся к теме.
ZoomX постепенно начинает набирать популярность. В связи с чем возникает ряд вопросов. Один из которых — кэширование элементов в шаблонизаторе Smarty. В принципе, по документации не сложно разобраться. Но, конечно, модыксерам хотелось бы работать так, как они привыкли. В этом плане Fenom из pdoTools реализован именно по этому принципу — для запрета кэширования в названии элемента указывается восклицательный знак. Всё привычно. Но работает не всегда.
Информация!
Fenom, в отличие от Smarty (хоть он и сделан по его подобию), не имеет встроенного механизма управления кэшированием своих тегов. Он работает на уровне целого шаблона. Т.е. вы можете управлять кэшированием всего шаблона целиком. А все теги шаблонизатора Fenom (модификаторы, вызовы сниппетов и т.д.) останутся динамическими. Таким образом, даже в кэшированном шаблоне кэшированный сниппет всё равно будет вызван. Но его обработку перехватит шаблонизатор MODX и проверит свой кэш. И если сниппет есть в кэше, то MODX не будет его выполнять и вернёт его результат.
Всё это происходит под капотом и скрыто для простого пользователя MODX. Но пытливому разработчику хотелось бы работать по понятным правилам. И не только работать, но и понимать их. Уверен, многие хотели бы управлять кэшированием файловых элементов, к которым обычная логика с восклицательным знаком не применима.
А вот что касается Smarty, то его подход к кэшированию немного похож на MODX. Вполне допускаю мысль, что принцип кэширования отдельных тегов MODX перенял именно у него, исходя из того, что Smarty появился раньше и включён в MODX.
Итак, давайте подробно разберёмся и сравним как работает кэширование элементов в шаблонах в MODX и в ZoomX.
Кэширование в MODX
Чтобы элементы кэшировались, необходимо включить кэширование страницы. За это отвечает чекбокс «Кэшируемый» на странице ресурса. Теперь рассмотрим 2 варианта.
Кэширование отключено
Если ресурс не кэшируется, то соответственно не будут кэшироваться и теги кэшируемых элементов. Ведь они сохраняются в кэше страницы. А раз страница не кэшируется, то и сохранять некуда. Значит и обрабатываться они будут при каждом запросе ресурса вместе с некэшируемымы тегами.
Кэширование включено
Если ресурс кэшируется, то кэшируемые теги заменяются на значения и сохнаняются в кэше страницы, а некэшируемые так и остаются и будут обрабатываться при каждой загрузке страницы. Т.е. всего 2 варианта — или кэшируется навсегда или не кэшируется никогда.
Кэширование в ZoomX
ZoomX отвязан от логики кэширования MODX и работает с кэшем самостоятельно. Использование восклицательного знака не допустимо. У Smarty, который используется в качестве шаблонизатора, есть свой механизм управления кэшированием тегов. Опять же, всё зависит от режима.
Кэширование отключено
Если ресурс некэшируемый или оно отключено для всех ресурсов системной настройкой zoomx_caching
, то как и в случае с MODX, закэшировать результат выполнения любого тега нельзя. Почти любого. Для сниппетов и чанков я сделал такую возможность. Для этого нужно в последнем параметре соответствующего модификатора передать время кэширования в секундах.
{"название_сниппета"|snippet:['foo' => 'bar']:300} - кэширование на 5 минут // если параметров нет, то время кэширования можно указать вместо них {"название_сниппета"|snippet:0} - кэширование навсегда // или через функцию run {run file="название_сниппета" cache_lifetime=60}
В этом случае в папке /core/cache/zoomx/snippets/
будет создан файл кэша. Для чанков соответственно в папке /core/cache/zoomx/chunks/
.
Кэширование включено
В этом случае как и в MODX необходимо указать какие теги должны остаться некэшированными. Иначе в кэш (у Smarty свой кэш) сохранятся только значения и вы получите полностью статическую страницу. Это касается любых тегов Smarty — и переменных, и модификаторов, и блоков. Чтобы оставить динамику, нужно в конце тега указать специальный атрибут nocache
.
{"название_сниппета"|snippet:['foo' => 'bar'] nocache}
Если нужно оставить часть страницы динамической, то эту часть нужно заключить между тегами {nocache}
и {/nocache}
.
{nocache} {"название_сниппета"|snippet:['foo' => 'bar']} {auth} Контент для залогиненных пользователей ... {/auth} {/nocache}
Эти элементы не будут закэшированы и будут обрабатыватся при каждом вызове. Но как и в случае некэшируемых ресурсов, вы можете использовать встроенный механизм кэширования элементов ZoomX и указать время, на которое нужно сохранить результат. Причём, данный механизм работает одинаково и для обычных элементов и для файловых.
Заключение
Как видите, ZoomX предлагает более продвинутый механизм кэширования элементов, который работает как для кэшируемой страницы, так и для некэшируемой. Шаблонизатор MODX даже вместе с Fenom предложить подобное не могут.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()