Сначала небольшой ликбез о том, что такое SetResultCacheKeys (вольный пересказ). Дело в том, что когда вы делаете StartResultCache, сохраняется не только кусок html, который выплевывается в экран, но и ряд ключей $arResult, которые сериализуются в php-файл. И раньше сериализовался весь массив, что давало большую нагрузку, конечно же.
Так появился SetResultCacheKeys, призванный указывать какие именно ключи надо сериализовывать. Он применяется в основных компонентах - новостей и каталога. Вот собственно и все.
В чем шум, собственно? Дело в том, что есть такой файл как component_epilog, который подключается в шаблон в обход кеширования. И вот незадача - он работает только с теми переменными arResult, которые указали в SetResultCacheKeys. Или со всеми, если данный метод не указан.
Но как же быть, если, например, в news.detail строго определенный набор ключей, а вам надо его расширить? Например, . А делается все просто, оказывается. Достаточно в result_modifier.php шаблона дополнить кешируемые ключи новыми:
Ну а в component_epilog.php уже сможете с ними прекрасно работать.
PS: Отрывками памяти помнится такое было в блогах, но поиск не нашел, да и сам тупил сидел. Если дубль идеи - извиняйте, не специально
Так появился SetResultCacheKeys, призванный указывать какие именно ключи надо сериализовывать. Он применяется в основных компонентах - новостей и каталога. Вот собственно и все.
В чем шум, собственно? Дело в том, что есть такой файл как component_epilog, который подключается в шаблон в обход кеширования. И вот незадача - он работает только с теми переменными arResult, которые указали в SetResultCacheKeys. Или со всеми, если данный метод не указан.
Но как же быть, если, например, в news.detail строго определенный набор ключей, а вам надо его расширить? Например, . А делается все просто, оказывается. Достаточно в result_modifier.php шаблона дополнить кешируемые ключи новыми:
<?if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
$this->__component->arResultCacheKeys = array_merge($this->__component->arResultCacheKeys, array('DETAIL_PAGE_URL'));
?> |
Ну а в component_epilog.php уже сможете с ними прекрасно работать.
PS: Отрывками памяти помнится такое было в блогах, но поиск не нашел, да и сам тупил сидел. Если дубль идеи - извиняйте, не специально
