Я, кажется, где-то уже отвечал, как работает кеширование CoTemplate. Повторю главное: CoTemplate кеширует структуру самого шаблона, а не отображаемые данные. О кешировании данных или же страниц целиком должен позаботиться контроллер.
Соответственно, ни один из перечисленных вариантов непосредственно на кеширование не влияет. Но различия в скорости работы и условиях применения есть.
{MY_TAG}
Назначается контроллером для данного шаблона, шаблонизатором обрабатывается быстрее всего и из-за простоты конструкции, и из-за того, что поиск происходит по небольшому локальному массиву тегов.
Плюсы:
-
Простота использования в шаблоне, скорость отрисовки.
-
Полный контроль поведения в контроллере, конфликты и коллапсы маловероятны.
Минусы:
-
Назначается только для конкретных шаблонов и блоков. Чтобы расширить область действия, необходимо править код.
{PHP.my_tag}
Это глобальная переменная PHP. Работает медленнее, чем локальный тег, потому что поиск переменной происходит в (огромном) массиве $GLOBALS. Больше отличий по скорости нет.
Плюсы:
-
Может быть виден из множества шаблонов и плагинов, в отличие от локальных тегов.
-
Иногда проще использовать готовый тег из глобальной переменной, чем писать специально для этого контроллер.
Минусы:
-
Чуть медленнее, чем {MY_TAG}.
-
Гораздо более подвержен конфликтам и случайным изменениям другими участками кода.
{PHP|my_tag()}
Это вызов функции со всеми вытекающими последствиями. Точнее, сначала соствление списка аргументов, а уж потом вызов функции. Так что работает такая конструкция медленнее обоих вышеперечисленных вариантов, но не слишком ощутимо.
Плюсы:
-
Теги только выводят данные неизменно. Callback-функции могут не только выводить, но и изменять данные.
-
Можно указывать параметры и получать более вариабельный результат.
-
Глобальность области применения, как и у {PHP.my_tag}.
Минусы:
-
Это полновесная PHP-функция, так что она может, скажем, положить весь скрипт в случае ошибки. В целом, требует разумного применения.
Краткое резюме:
-
используйте теги {MY_TAG} в большинстве случаев;
-
используйте {PHP.my_tag}, если тег нужно выводить в неопределённом множестве локаций или если нет смысла писать плагин для вывода легко доступной переменной;
-
используйте {PHP|my_tag()} и другие формы callback-функций для обработки данных или создания виджетов (виджет - это callback-функция, которая отображает целый шаблон согласно переданным ей параметрам).