Пауза в загрузке контента и ошибка 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
modx.pro
205
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
                -
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  12