Для примера беру news.list.
В component.php код, который расположен до и после блока с startResultCache, выполняется на каждом хите. А код, который начинается от
и заканчивается здесь:
выполнится только на первом хите после сброса кэша.
Кэшируется html код шаблона и кэшируются следующие ключи $arResult:
При желании через SetResultCacheKeys этот набор можно дополнить. Значения из $aResult с этими ключами попадут в кэш и будут доступны в component_epilog .
Код в result_modifier выполняется только на первом хите после сброса кэша, на дальнейших хитах компонент как-бы "перепрыгивает" через result_modifier и выдаёт html код шаблона уже из кэша.
Я поверхностно вскопал исходники startResultCache :
- проверяем, есть ли кэш, или его нет. Если кэша нет, прыгаем глубже:
- кэш есть:
достаём из кеша $arResult
- производится ещё несколько проверок и подключается component_epilog
Кэш компонента зависит от следующих параметров:
- название компонента
- название шаблона
- $arParams
- дополнительные параметры, например группа текущего пользователя.
В component.php код, который расположен до и после блока с startResultCache, выполняется на каждом хите. А код, который начинается от
if($this->startResultCache(false, array(($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups()), $bUSER_HAVE_ACCESS, $arNavigation, $arrFilter, $pagerParameters))) { |
$this->includeComponentTemplate(); } |
Кэшируется html код шаблона и кэшируются следующие ключи $arResult:
$this->setResultCacheKeys(array( "ID", "IBLOCK_TYPE_ID", "LIST_PAGE_URL", "NAV_CACHED_DATA", "NAME", "SECTION", "ELEMENTS", "IPROPERTY_VALUES", "ITEMS_TIMESTAMP_X", )); |
При желании через SetResultCacheKeys этот набор можно дополнить. Значения из $aResult с этими ключами попадут в кэш и будут доступны в component_epilog .
Код в result_modifier выполняется только на первом хите после сброса кэша, на дальнейших хитах компонент как-бы "перепрыгивает" через result_modifier и выдаёт html код шаблона уже из кэша.
Я поверхностно вскопал исходники startResultCache :
- проверяем, есть ли кэш, или его нет. Если кэша нет, прыгаем глубже:
if ($this->__cache->startDataCache($cacheTime, $this->__cacheID, $this->__cachePath)) { $this->__NavNum = $GLOBALS["NavNum"]; $this->__currentCounters = self::$__componentCounter; if (defined("BX_COMP_MANAGED_CACHE") && $this->__cache->isStarted()) $CACHE_MANAGER->startTagCache($this->__cachePath); return true; } |
- кэш есть:
$arCache = $this->__cache->GetVars(); $this->arResult = $arCache["arResult"]; |
- производится ещё несколько проверок и подключается component_epilog
Кэш компонента зависит от следующих параметров:
- название компонента
- название шаблона
- $arParams
- дополнительные параметры, например группа текущего пользователя.