Документация для разработчиков

Класс CPhpCache

CPhpCache - класс для кеширования PHP переменных и HTML результата выполнения скрипта.

Методы класса

Метод Описание С версии
StartDataCache Инициализирует механизм кеширования и начинает буферизацию или выводит содержимое из кеша.
EndDataCache Сохраняет буферизированный HTML и PHP переменные файле кеша.
InitCache Инициализирует механизм кеширования.
GetVars Возвращает сохраненные в кеше PHP переменные.
Output Выводит сохраненный в кеше HTML результат.
IsCacheExpired Проверяет истек ли период жизни кэша.3.3.7
CleanDir Метод очищает кеш по параметру basedir.8.5.1
AbortDataCache Отменяет создание текущего кэша.5.1.8

Дополнительно

  • Кеширование
  • Класс CPageCache
  • Специальный параметры


  • Пользовательские комментарии

    Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

    Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

    Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
    12
    Игорь Барковский
    Общая схема работы с кэшированием с помощью этого класса такова:
    Код
    $obCache = new CPHPCache();
    if( $obCache->InitCache(/*задать ttl, cacheID и cachePath*/) )// Если кэш валиден
    {
       $vars = $obCache->GetVars();// Извлечение переменных из кэша
    }
    elseif( $obCache->StartDataCache()  )// Если кэш невалиден
    {
       /*Тяжелые вычисления*/
       $obCache->EndDataCache(/*массив с переменными*/);// Сохраняем переменные в кэш.
    }
    /*Можно оперировать полученными переменными*/
    


    И пример получения ID всех доступных элементов инфоблоков:

    Код
    $obCache = new CPHPCache();
    $cacheLifetime = 86400*7; $cacheID = 'AllItemsIDs'; $cachePath = '/'.$cacheID;
    if( $obCache->InitCache($cacheLifetime, $cacheID, $cachePath) )
    {
       $vars = $obCache->GetVars();
       extract($vars);
       // или же 
       $arAllItemsIDs = $vars['arAllItemsIDs'];
    }
    elseif( $obCache->StartDataCache()  )
    {
       $rs = CIBlockElement::GetList(array(), array(), false, false, array('ID'));
       while( $ar = $rs->Fetch() )
          $arAllItemsIDs[] = $ar['ID'];
       $obCache->EndDataCache(array('arAllItemsIDs' => $arAllItemsIDs));
    }
    
    print_r(count($arAllItemsIDs));
    
    
    11
    Игорь Шевчик
    Пример кеширования, на мой взгляд более наглядный чем в документации

    Код
    $cntIBLOCK_List = 10;
    $cache = new CPHPCache();
    $cache_time = 3600;
    $cache_id = 'arIBlockListID'.$cntIBLOCK_List;
    $cache_path = '/arIBlockListID/';
    if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path))
    {
       $res = $cache->GetVars();
       if (is_array($res["arIBlockListID"]) && (count($res["arIBlockListID"]) > 0))
          $arIBlockListID = $res["arIBlockListID"];
    }
    if (!is_array($arIBlockListID))
    {
       $res = CIBlock::GetList(
          Array(), 
          Array(
             'TYPE' => 'catalog', 
             'SITE_ID' => SITE_ID, 
             'ACTIVE' => 'Y', 
             "CNT_ACTIVE" => "Y", 
             "!CODE" => 'test%'
          ), true
       );
       while($ar_res = $res->Fetch())
       {
          if($ar_res['ELEMENT_CNT'] > 0)
          $arIBlockListID[] = $ar_res['ID'];
       }
       //////////// end cache /////////
       if ($cache_time > 0)
       {
             $cache->StartDataCache($cache_time, $cache_id, $cache_path);
             $cache->EndDataCache(array("arIBlockListID"=>$arIBlockListID));
       }
    }
     
    © «Битрикс», 2001-2017, «1C-Битрикс», 2017