Пауза в загрузке контента и ошибка Resource with id 4105 was not found in context catalog
Помогите, пожалуйста, решить проблему с медленной загрузкой сайта.
В основе проблемы ошибка:
Пауза составляет до 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 и игнорировать
в большинстве случаев. Так вот, у меня явно не тот случай, чтобы игнорировать,
но как исправить эту проблему я не знаю.
Комментарии: 12
ну проблема в Wayfinder, сами говорите…
Во-первых, он некешируется… каждый раз меню строится с нуля.
Попробуйте заменить на pdoMenu, он быстрее работает.
Вы к тому же 3 уровня меню строите… как много пунктов в меню то?
Во-первых, он некешируется… каждый раз меню строится с нуля.
Попробуйте заменить на pdoMenu, он быстрее работает.
Вы к тому же 3 уровня меню строите… как много пунктов в меню то?
Благодарю за ответ.
Заменил Wayfinder на pdoMenu.
Оказывается для pdoMenu нужно pdoTools. ;-)
Поставил. Меню глючит, но работает чуть лучше.
Полагаете вот эти предупреждения на скорость формирования pdoMenu не влияют?
И целые секунды уходят на построение меню?
с pdoMenu лог такой:
Заменил 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
Меню на Wayfinder
pdoMenu — слева внизу какие-то «надписи». Что-то лишнее выводит.
pdoMenu — слева внизу какие-то «надписи». Что-то лишнее выводит.
[[!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 -->
Что в чанке catalog_outerTpl?
Сколько ресурсов в дереве, которое строит сниппет?
pdoMenu нужно вызывать кешированным, зачем вы его некешированным вызываете?
Сколько ресурсов в дереве, которое строит сниппет?
pdoMenu нужно вызывать кешированным, зачем вы его некешированным вызываете?
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. Но вы можете его включить как принудительное требование для тех людей, которые меняют чанки — чтобы они не могли использовать трехэтажные конструкции.
Замена Wayfinder на pdoMenu
modx.pro/help/6887
Ситуацию не прояснило.
Не вижу его вызова, но на всякий случай
catalog
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 -->
Время загрузки страницы около 10,02 сек.
Из них Wayfinder тратит 7.63 сек.
Буду благодарен за помощь с оптимизацией.
Ссылка на полную картинку https://file.modx.pro/files/d/0/e/d0eb40c077170cdd126cceb3c51a7442.jpg
Из них 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
Нашел статью MODx Revo: кешируем сниппет wayfinder
capweb.ru/modx-revo-snippet-wayfinder-cache-getcache.html
Установил сниппет getCache — modx.com/extras/package/getcache
модифицировал меню:
Элементы меню (каталога) в папке этой появились.
Но результат нулевой — как формировалось меню по 10 — 15 секунд, так и осталось.
Беда, беда…
capweb.ru/modx-revo-snippet-wayfinder-cache-getcache.html
Установил сниппет getCache — modx.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 секунд, так и осталось.
Беда, беда…
Спасибо теске Наумову Алексею!
Переход на 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
В оригинале было так:
получал сотни не нужных ссылок в меню. После ее удаления (просто попробовал)
ненужные строки ушло.
Поясните, пожалуйста, не вылезут ли проблемы в будущем.
&where
JSON строка, в которой задаются параметры для выборки данных.
Например: &where=`[{«class_key:!=»: «msCategory»}]` То есть, не выводить те ресурсы, которые являются категориями Minishop.
Однако почему ее удаление дало положительный результат, я, конечно, не понял.
Буду благодарен за краткое пояснение. ;-)
Переход на 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.
Однако почему ее удаление дало положительный результат, я, конечно, не понял.
Буду благодарен за краткое пояснение. ;-)
-
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.