Меня всегда удивляло, зачем в компонентах при включенном кешировании шаблон тоже кешируется?
Вполне ведь достаточно было бы кешировать только результат работы компоннета (сформированный массив $arResult), а шаблон просто подлючать через include и передавать в него этот массив.
На производительность это практически никак не повлияет, так как при правильной разработке сайта в шаблоне не должно быть ни одного запроса к базе или другой ресурсоемкой фукнции. Это обычный PHP код, который довольно быстро интерпретируется.
Зато если бы шаблон не кешировался вместе со всем компонентом - это бы сразу избавило от многих проблем. Так, в таком шаблоне можно было бы устанавливать динамические свойства (SEO), или подключать в шаблоне другие компоненты (например, видео плеер или компонент меню), зная что их стили и скрипты нормально подлкючатся.
P.S. Так как я при разработке пользуюсь в основном одним компонентом - то я в нем предусмотрел такую фукнцию, и если в шаблоне лежит файл template_nc.php - то этот шаблон подключается без кеширования.
Наши компоненты были кастомизированы еще в шестерке, я эту проблему исправлял в начале года, после праздников. А когда обновление вышло не помню. А вы какой компонент используете?
и еще один момент: это частный случай. Клиент очень хорошо и подробно заполнил описания групп в одном из инфоблоков. Описания красивые и очень подробные:)
Ссылочку не нашел. Метод как всегда прекрасен и незадокументирован. в общем в компоненте перед вызовом шаблона пишите $this->SetResultCacheKeys(array(Ключи_из_arResult)); В результате в кеш попадет только то, что нам нужно. Файлик получится маленький и аккуратный. По опыту: кеширую ключи, которые нужны после подключения шаблона, т.е. для установки тайтла, хлебных крошек и прочего.
Получается, что да. Посмотрел у себя catalog.section.list - там действительно нет $this->SetResultCacheKeys(). Думаю стоит написать в ТП, чтоб добавили, а то тупо кастомизировать только из-за этого.
а еще круче - позволить управлять кешем не вмешиваясь в компонент, а действуя по аналогии с result_modifier тогда и кастомизировать не надо подготовил файлик прописал там все что нужно для кеширования и досвидос
Можно использовать в компонентах функцию InitCache из класса CPHPCache вместо $this->StartResultCache в компоненте. В тестовом компоненте такое делал. Прописываешь путь. Он сериализирует объект данных, и только их записывает. И если не истекло время то ты как бы обращаешься к этому файлу вместо БД. Таким образом тоже получается кеш. Но есть огромный минус. При изменении/удалении/добавлении элемента кеш не сбрасывается. Только по времени или если изменилась значимая переменная. Но есть вариант очищать кеш для компонентов(указанных) через события добавления/измения/добавления/измения элементы.. Но я не стал рисковать и пробовать как это будет работать.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».