@eugene159

Как понять, когда вызывать свой сниппет кешированным, а когда — некешированным?

Есть сниппеты, которые ОБЯЗАТЕЛЬНО нужно вызывать некешированными (с воскл. знаком в начале). AjaxForm, например, или pdoPage. А как быть со своими сниппетами? Когда мне свой сниппет вызывать кешированным, а когда - нет? Или тут без разницы? Я ведь кеширование никакое не писал.

pdoResources каждый раз возвращает новый результат. Ведь ресурсы разные. И в плейсхолдерах будут разные значения. Почему он вызывается кешированным (без воскл. знака)? На странице документации в примерах это видно:
https://docs.modx.pro/en/components/pdotools/snipp...

Но pdoPage некешированным (с воскл. знаком):
https://docs.modx.pro/komponentyi/pdotools/snippet...

Не вижу логики, за счет которой я смог бы понять, как мне вызывать свои сниппеты.
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
an-tar
@an-tar Куратор тега MODX
Full stack web developer
pdoResources каждый раз возвращает новый результат.

я бы сказал, что при прочих равных скорее и чаще он возвращает именно один и тот же результат, потому и может быть кешированным. Ну или крайне желательно по известной причине - экономии ресурса.
Или другой пример из коллекции pdoTools - pdoMenu. Меню может быть сложным(например, а-ля megamenu), но меняться крайне редко(сделали раз структуру сайта и пользуетесь), поэтому очевидно иметь его кешированным крайне выгодно. Если же что-то в структуре(или самих ресурсах) поменяется, MODX сам перекеширует вызов.
Или еще пример pdoSitemap - карта сайта если и меняется, то не часто, а также может требовать значительных ресурсов для генерации, посему вызов здесь нужен кешированный, но если что-то изменится в структуре, ядро позаботится об этом.

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

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

Это был ваш капитан))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы