getCacheSensitive обработчик кеша на основе getCache от Jason Coward

На сайте, который мне нужно оптимизировать, используется tagManager 2. Генерация страницы бренда на нем занимает от 3 до 6 секунд. Самый тяжелый элемент это фильтр товаров tmFilters от tagManager. Выполняется 4.5387252 секунды.
Напрашивается его закешировать. Для этого взял сниппет getCache от Jason Coward и его доработал, чтоб он перехватывал и кешировал js, стили, $_GET, $_POST от tmFilters.
Получился сниппет getCacheSensitive

До кеширования 4.5387252 секунды:
[[!tmFilters? &filterOuterTpl=`public. tm2_filterOuterTpl` &filterTpl=`public. tm2_filterTpl` 
&filterNumericOuterTpl=`public. tm2_filterOuterTpl` &filterNumericTpl=`public. tm2_filterNumericTpl` 
&jsMap=`1` &jsScript=`1` &toPlaceholder=`filters` &categoryId=`256` &parents=`256` 
&tvFilters=`{"product-manufacture":"29000"}` ]]	
8	0.001193	4.5387252
После кеширования 0.0029261 секунды:
[[!getCacheSensitive? &preHooks=`getFilterValueMain` &element=`tmFilters` &cacheKey=`tmFilters` &cacheExpires=`0`
&jsMap=`1` &jsScript=`1` &toPlaceholder=`filters` &categoryId=`256` &parents=`256` 
&tvFilters=`{"product-manufacture":"29000"}` ]]	
0	0	0.0029261
И страница правильно работает.
Надеюсь getCacheSensitive вам будет полезен :-).
Александр Туниеков
08 декабря 2019, 19:38
modx.pro
964
+5
Поблагодарить автора Отправить деньги

Комментарии: 6

Sergey (Sentinel)
08 декабря 2019, 20:35
0
Для mfilter2 не подойдёт?
    Александр Туниеков
    08 декабря 2019, 20:50
    0
    Думаю подойдет. Если не используются &toPlaceholders или &toSeparatePlaceholders. В getCache только &toPlaceholder обрабатывается. Можно так же как скрипты перехватывать изменения $modx->placeholders, но пока не требовалось.
      Sergey (Sentinel)
      09 декабря 2019, 22:11
      0
      При вызове пишет такую ошибку
      getClass requires an element and elementClass property to be set
        Александр Туниеков
        10 декабря 2019, 07:06
        0
        С mFilter2 вот эти параметры должны быть так:
        &element=`mFilter2` &cacheKey=`mFilter2`
        В assets/components/msearch2/action.php есть такая строка:
        $config = @$_SESSION['mSearch2'][$_REQUEST['key']];
        То есть mFilter2 свой конфиг в сессию пишет. Чтоб getCacheSensitive мог mFilter2 кешировать надо будет в него добавить перехват сессии еще.
        А в текущей версии не будет работать. Могу его доработать под mFilter2, но платно :-). И мне надо будет доступы к сайту с mFilter2, чтоб тестировать как будет работать.
          Sergey (Sentinel)
          10 декабря 2019, 12:41
          0
          Ок, напишите в личку договоримся
          Александр Туниеков
          10 декабря 2019, 07:58
          0
          А блин еще надо добавить &elementClass=`modSnippet`. Я же сниппет у себя скопировал в MODX и elementClass в параметрах по умолчанию шел.
          Обновил getCacheSensitive
          Добавил if(empty($elementClass)) $elementClass = 'modSnippet';
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6