Пауза в загрузке контента и ошибка Resource with id 4105 was not found in context catalog

Добрый день.

Помогите, пожалуйста, решить проблему с медленной загрузкой сайта.
В основе проблемы ошибка:
modx Resource with id 4105 was not found in context
Пауза составляет до 10 секунд.


Я далек от MODX, но имею опыт в PHP+MySQL.
Знакомый попросил разобраться с проблемой медленной загрузки сайта.
Прикрутил его сайт к запасному домену и закрыл от посетителей через
Apache Basic Authorization.

Перевел лог в режим DEBUG и вижу такое:
[2019-05-21 13:52:04] (DEBUG @ ...modlexicon.class.php : 416) Language string not found: "sisea.get"
[2019-05-21 13:52:04] (DEBUG @ ...modlexicon.class.php : 416) Language string not found: "sisea.post"
[2019-05-21 13:52:04] (DEBUG @ ...modlexicon.class.php : 416) Language string not found: "sisea.toplaceholder_desc"
[2019-05-21 13:52:04] (WARN @ ...modcontext.class.php : 248) `4105` was requested but no alias was located.
[2019-05-21 13:52:04] (INFO in modContext::makeUrl @ resource 163) Resource with id 4105 was not found in context catalog
Пауза на 7 секунд!
С 13:52:04 до 13:52:11.

[2019-05-21 13:52:11] (DEBUG @ ...modlexicon.class.php : 416) Language string not found: "Имя CSS-класса для активного ресурса."
[2019-05-21 13:52:11] (DEBUG @ ...modlexicon.class.php : 416) Language string not found: ""
[2019-05-21 13:52:11] (DEBUG @ ...modlexicon.class.php : 416) Language string not found: "В чанке сниппета будет доступен плейсхолдер [[+subitemcount]] - число дочерних ресурсов."

Проблема проявляется при запросе некешированного контента.
Ресурс 4105 называется «Результаты поиска».

`4105` was requested but no alias was located.
Псевдоним у 4105: rezultatyi-poiska так что alias имеется.
Но по почему no alias was located?

Видимо, ресурс 4105 имеет отношения к выводу в ответ на поисковый запрос.
Само собой, что к контексту catalog этот ресурс 4105
отношения не имеет (not found in context catalog) и это нужно исправить.

До того, как заметил эту проблему,
стал удалять различные чанки, чтобы
увидеть, где именно проблема с загрузкой страницы.
Накопал тот чанк, который строит каталог с товарами оно
же основное меню с товарами ибо это у нас интрент магазин.
В найденном чанке и есть замедление загрузки сайта.

Как видно в приведенном выше логе,
проблема появляется при построении каталога
сниппетом Wayfinder.

Чанк: catalog_in_catalog
id=26
<!-- Goods Catalogue 2 -->
[[!Wayfinder? 
&contexts=`[[++catalogContext]]`
&startId=`[[++IDcatalog]]` 
&level=`3`
&hideSubMenus=`1`
&where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
&outerTpl=`catalog_outerTpl`
&hereClass=`current_page` 
&levelClass=``
&firstClass=`first` 
&lastClass =`last` ]]
<!-- End Goods Catalogue 2 -->

Если удалить этот чанк (catalog_in_catalog), то пауза исчезает
и страница грузится намного быстрее, но без каталога-менюшки.

Подскажите, пожалуйста куда копать.
Буду благодарен за помощь.

P.S.
Это ошибка: modx Resource with id 4105 was not found in context

Прочел статью:
2.5.5 logs «Resource with id not found in context » on valid cross-context links #13278
github.com/modxcms/revolution/issues/13278

Народ обсуждает, что разработчик Jason Coward (opengeek) перестарался и существующие
ссылки стал называть не найденными в контексте. А потому сообщение из
LOG_LEVEL_ERROR нужно перенести в LOG_LEVEL_WARN и игнорировать
в большинстве случаев. Так вот, у меня явно не тот случай, чтобы игнорировать,
но как исправить эту проблему я не знаю.
Алексей
21 мая 2019, 14:25
119
0

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

Наумов Алексей
21 мая 2019, 14:57
0
ну проблема в Wayfinder, сами говорите…
Во-первых, он некешируется… каждый раз меню строится с нуля.
Попробуйте заменить на pdoMenu, он быстрее работает.
Вы к тому же 3 уровня меню строите… как много пунктов в меню то?
    Алексей
    21 мая 2019, 20:55
    0
    Благодарю за ответ.

    Заменил Wayfinder на pdoMenu.
    Оказывается для pdoMenu нужно pdoTools. ;-)
    Поставил. Меню глючит, но работает чуть лучше.

    Полагаете вот эти предупреждения на скорость формирования pdoMenu не влияют?
    И целые секунды уходят на построение меню?

    с pdoMenu лог такой:
    [2019-05-21 20:40:18] (DEBUG @ /home/finside/web/bezriska.net/public_html/core/model/modx/modlexicon.class.php : 416) Language string not found: "Will output the parameters passed in, as well as the end output. Leave off when not testing."
    [2019-05-21 20:40:18] (WARN @ /home/finside/web/bezriska.net/public_html/core/model/modx/modcontext.class.php : 248) `9190` was requested but no alias was located.
    [2019-05-21 20:40:18] (INFO in modContext::makeUrl @ resource 163) Resource with id 9190 was not found in context catalog
    [2019-05-21 20:40:18] (WARN @ /home/finside/web/bezriska.net/public_html/core/model/modx/modcontext.class.php : 248) `9191` was requested but no alias was located.
    [2019-05-21 20:40:18] (INFO in modContext::makeUrl @ resource 163) Resource with id 9191 was not found in context catalog
    [2019-05-21 20:40:18] (WARN @ /home/finside/web/bezriska.net/public_html/core/model/modx/modcontext.class.php : 248) `4105` was requested but no alias was located.
    [2019-05-21 20:40:18] (INFO in modContext::makeUrl @ resource 163) Resource with id 4105 was not found in context catalog
Алексей
21 мая 2019, 21:03
0
Меню на Wayfinder


pdoMenu — слева внизу какие-то «надписи». Что-то лишнее выводит.
    Алексей
    21 мая 2019, 21:20
    0
    [[!pdoMenu? 
       &contexts=`[[++catalogContext]]`
       &startId=`[[++IDcatalog]]` 
       &level=`3`
       &hideSubMenus=`1`
       &where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
       &outerTpl=`catalog_outerTpl`
       &hereClass=`current_page` 
       &levelClass=``
       &firstClass=`first` 
       &lastClass =`last` 
    ]]
         <!-- End Goods Catalogue 2 -->
      Наумов Алексей
      22 мая 2019, 11:07
      0
      Что в чанке catalog_outerTpl?
      Сколько ресурсов в дереве, которое строит сниппет?
      pdoMenu нужно вызывать кешированным, зачем вы его некешированным вызываете?
        Алексей
        22 мая 2019, 13:39
        0
        pdoMenu нужно вызывать кешированным, зачем вы его некешированным вызываете?
        Виноват — не разобрался.

        Исправляюсь:
        <!-- Goods Catalogue PDOmenu -->
        [[!pdoMenu? 
           &contexts=`[[++catalogContext]]`
           &startId=`[[++IDcatalog]]` 
           &level=`3`
           &hideSubMenus=`1`
           &where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
           &outerTpl=`catalog_outerTpl`
           &hereClass=`current_page` 
           &levelClass=``
           &firstClass=`first` 
           &lastClass =`last` 
        -->   &cache=`1`
        -->   &cacheTime=`86400`
        -->   &fastMode=`1`
        ]]
             <!-- End Goods Catalogue PDOmenu -->
        В результате скорость загрузки страницы сократилась с 15-25 сек, до 5-10 сек, что уже намного лучше!

        catalog_outerTpl
        <ul class="catalog_contaner">
        [[+wf.wrapper]]
        </ul>

        catalog_tovar
        <div><a href="[[~[[getDocFild? &id=`[[getDocFild? &id=`[[*parent]]` &fild=`parent`]]` &fild=`parent`]]]]"><<- [[getDocFild? &id=`[[getDocFild? &id=`[[getDocFild? &id=`[[*parent]]` &fild=`parent`]]` &fild=`parent`]]` &fild=`menutitle`]]</a></div>
        
        [[!Wayfinder? 
        &contexts=`[[++catalogContext]]`
        &startId=`[[getDocFild? &id=`[[*parent]]` &fild=`parent`]]` 
        &level=`1`
        &hideSubMenus=`1`
        &outerTpl=`catalog_outerTpl`
        &hereClass=`current_page` 
        &levelClass=``
        &firstClass=`first` 
        &lastClass =`last`
        &where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
        ]]
        
             <!-- End Goods Catalogue 3 -->
        Нашел немного ссылок в помощь тем, кто столкнется с этим заданием.
        Вопрос про pdoMenu и кеширование обсуждали здесь
        modx.pro/help/4812
        [[pdoMenu?
          &cache=`1`
          &cacheTime=`180`
          &fastMode=`1`

        MODX Docs — pdoMenu
        docs.modx.pro/komponentyi/pdotools/snippetyi/pdomenu
        &fastMode 0 — Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны
        &cache 0 — Кэширование результатов работы сниппета
        &cacheTime 3600 — Время актуальности кэша, в секундах

        Большой рассказ про pdoTools, часть первая
        bezumkin.ru/training/course2/3005/
        Есть еще один интересный параметр обработки плейсхолдеров — &fastMode.
        Он выключает передачу плейсхолдеров в родной парсер MODX, и то, что не смог обработать pdoParser просто будет вырезано.
        В последних версиях pdoTools его использовать нет нужды, потому что если pdoParser всё обработал, и в чанке не осталось ни одного [[+tag]], то он сразу отдаёт результат, не трогая modParser. Но вы можете его включить как принудительное требование для тех людей, которые меняют чанки — чтобы они не могли использовать трехэтажные конструкции.
        Алексей
        22 мая 2019, 13:50
        0
        Изучаю так же
        Замена Wayfinder на pdoMenu
        modx.pro/help/6887
        Алексей
        22 мая 2019, 14:03
        0
        Замена Wayfinder на pdoMenu
        modx.pro/help/6887
        Ситуацию не прояснило.

        Не вижу его вызова, но на всякий случай
        catalog
        <!-- Goods Catalogue 1 -->
             [[Wayfinder? 
        &contexts=`[[++catalogContext]]`
        &startId=`[[++IDcatalog]]` 
        &level=`1`
        &outerTpl=`catalog_outerTpl` 
        &hideSubMenus=`0`
        &where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
        &hereClass=`current_page` 
        &firstClass=`first` 
        &lastClass =`last` ]]
             <!-- End Goods Catalogue 1 -->
Алексей
21 мая 2019, 21:25
0
Время загрузки страницы около 10,02 сек.
Из них Wayfinder тратит 7.63 сек.
Буду благодарен за помощь с оптимизацией.



Ссылка на полную картинку https://file.modx.pro/files/d/0/e/d0eb40c077170cdd126cceb3c51a7442.jpg

Wayfinder
Total parse time	10.0207360 s
Total queries	466
Total queries time	0.1870720 s
Memory peak usage	43 Mb
MODX version	MODX Revolution 2.7.1-pl (traditional)
PHP version	5.6.38
Database version	mysql 5.5.61-log
From cache	false
Алексей
22 мая 2019, 04:32
0
Нашел статью MODx Revo: кешируем сниппет wayfinder
capweb.ru/modx-revo-snippet-wayfinder-cache-getcache.html

Установил сниппет getCachemodx.com/extras/package/getcache
модифицировал меню:

<!-- Goods Catalogue 2ch -->
[[!getCache? 
&element=`Wayfinder` 
&cacheKey=`global_cache` 
&contexts=`[[++catalogContext]]`
&startId=`[[++IDcatalog]]`
&level=`3`   
&hideSubMenus=`1`
&where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
&outerTpl=`catalog_outerTpl`
&hereClass=`current_page` 
&levelClass=``
&firstClass=`first` 
&lastClass =`last` 
&debug=`0`
]]
     <!-- End Goods Catalogue 2ch -->
Директория /core/cache/global_cache создалась.
Элементы меню (каталога) в папке этой появились.

Но результат нулевой — как формировалось меню по 10 — 15 секунд, так и осталось.
Беда, беда…
Алексей
22 мая 2019, 16:14
0
Спасибо теске Наумову Алексею!
Переход на pdoMenu дал очень ускорительный результат!

Искал-искал и нашел.
Статья: Меню в MODX с помощью компонента pdoMenu. Modx pdomenu пример
prostoy-site.ru/modx/modx-pdomenu-primer.html

В середине есть подзаголовок:
pdoMenu как замена Wayfinder / Сниппеты / Modx Revolution / Технический блог веб-разработчика

В ней подробно о том, какие Основные параметры Wayfinder на какие менять для pdoMenu.
Wayfinder -->pdoMenu
&startId=`[­[*id]]` --> на &parents=`[­[*id]]`
&cacheResults --> &cache=`1`
&contexts --> &context
&hereTpl --> &tplHere

Параметры шаблонов
&outerTp --> &tplOuter
&innerTpl --> &tplInner

В результате вышло так:
/manager/?a=element/chunk/update&id=26
catalog_in_catalog
<!-- Goods Catalogue PDOmenu -->
[[!pdoMenu? 
   &context=`[[++catalogContext]]`
   &parents=`[[++IDcatalog]]` 
   &level=`3`
   &cache=`1`
   &cacheTime=`86400`
   &fastMode=`1`
   &hideSubMenus=`1`
! Удалил эту строку ---> &where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
   &tplOuter=`catalog_outerTpl`
   &hereClass=`current_page` 
   &levelClass=``
   &firstClass=`first` 
   &lastClass =`last` 
]]
     <!-- End Goods Catalogue PDOmenu -->

В оригинале было так:
<!-- Goods Catalogue 2 -->
[[!Wayfinder? 
&contexts=`[[++catalogContext]]`
&startId=`[[++IDcatalog]]` 
&level=`3`
&hideSubMenus=`1`
&where=`[{"template:!=": "[[++IDtovarTpl]]"}]`
&outerTpl=`catalog_outerTpl`
&hereClass=`current_page` 
&levelClass=``
&firstClass=`first` 
&lastClass =`last` ]]
     <!-- End Goods Catalogue 2 -->
До удаления строки &where=`[{«template:!=»: "[[++IDtovarTpl]]"}]`
получал сотни не нужных ссылок в меню. После ее удаления (просто попробовал)
ненужные строки ушло.

Поясните, пожалуйста, не вылезут ли проблемы в будущем.

&where
JSON строка, в которой задаются параметры для выборки данных.
Например: &where=`[{«class_key:!=»: «msCategory»}]` То есть, не выводить те ресурсы, которые являются категориями Minishop.

Однако почему ее удаление дало положительный результат, я, конечно, не понял.
Буду благодарен за краткое пояснение. ;-)
Алексей
23 мая 2019, 15:24
0
-
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.