Хотелось бы разобраться с тегированным кешированием, услышать мнение людей, кто пользуется им в повседневной жизни. Расписал своё понимание этой темы.
По дефолту есть только тег iblock_id_XX, который сбрасывает кеш при добавлении/изменении/удалении элементов этого инфоблока. Причем удаляется весь кеш из папки $cache_dir.
Например, если один компонент используется для вывода новостей (IBLOCK_ID = 1) и акций (IBLOCK_ID = 2), $cache_dir указана как test_cache, то при создании кеша создается папка и файл - /bitrix/cache/test_cache/(первые 2 символа $cache_id)/$cache_id.phpДалее, если изменить любой элемент 1 или 2 инфоблока, то удалиться вся папка /bitrix/cache/test_cache/ .
Из этой ситуации есть минимум 2 выхода:
1) Указывать $cache_dir = "/", тогда папки из $cache_id будут создаваться в /bitrix/cache/ и при C/U/D элементов будут удаляться только эти папки;
2) Генерировать $cache_dir по шаблону, например "iblock_id_".$this->arParams['IBLOCK_ID']
Принципиального отличия между этими вариантами нет, кроме как создания дополнительного уровня папок у второго варианта. Но это может помочь, при дублировании первых символов $cache_id, ведь в этом случае в папку попадут несколько файлов из разных (а могут и из одного) инфоблоков, и при изменениях в одном из них, будет удаляться кеш другого. А создав каждому инфоблоку свою $cache_dir мы исключим удаление лишнего кеша.
Что касается не дефолтных тегов, то создание тегов вида "element_id_".$elementID врядли чем то сможет помочь, так как все эти теги будут смотреть на одну дирректорию внутри /bitrix/cache/iblock_id_(IBLOCK_ID), и при изменении элемента, все равно будет удаляться кеш всего инфоблока.
Но все же, если очень хочется при изменении элемента удалять только его кеш, то можно для каждого элемента создавать отельную $cache_dir. Но в этом случае создасться огромное количество дирректорий в /bitrix/cache/
Скрытый текст | ||
---|---|---|
|
По дефолту есть только тег iblock_id_XX, который сбрасывает кеш при добавлении/изменении/удалении элементов этого инфоблока. Причем удаляется весь кеш из папки $cache_dir.
Например, если один компонент используется для вывода новостей (IBLOCK_ID = 1) и акций (IBLOCK_ID = 2), $cache_dir указана как test_cache, то при создании кеша создается папка и файл - /bitrix/cache/test_cache/(первые 2 символа $cache_id)/$cache_id.phpДалее, если изменить любой элемент 1 или 2 инфоблока, то удалиться вся папка /bitrix/cache/test_cache/ .
Из этой ситуации есть минимум 2 выхода:
1) Указывать $cache_dir = "/", тогда папки из $cache_id будут создаваться в /bitrix/cache/ и при C/U/D элементов будут удаляться только эти папки;
2) Генерировать $cache_dir по шаблону, например "iblock_id_".$this->arParams['IBLOCK_ID']
Принципиального отличия между этими вариантами нет, кроме как создания дополнительного уровня папок у второго варианта. Но это может помочь, при дублировании первых символов $cache_id, ведь в этом случае в папку попадут несколько файлов из разных (а могут и из одного) инфоблоков, и при изменениях в одном из них, будет удаляться кеш другого. А создав каждому инфоблоку свою $cache_dir мы исключим удаление лишнего кеша.
Что касается не дефолтных тегов, то создание тегов вида "element_id_".$elementID врядли чем то сможет помочь, так как все эти теги будут смотреть на одну дирректорию внутри /bitrix/cache/iblock_id_(IBLOCK_ID), и при изменении элемента, все равно будет удаляться кеш всего инфоблока.
Но все же, если очень хочется при изменении элемента удалять только его кеш, то можно для каждого элемента создавать отельную $cache_dir. Но в этом случае создасться огромное количество дирректорий в /bitrix/cache/