Интересная задачка на знание API:)

Есть сниппет:


До измения результат был такой:
Mem: 206,75 mb, MySQL: 7,9950 s, 37962 request(s), PHP: 7,2978 s, total: 15,2928 s, document from database

После измения стал такой:
Mem: 18,75 mb, MySQL: 0,0324 s, 178 request(s), PHP: 0,4197 s, total: 0,4520 s, document from database

Собственно вопрос что я изменил? :)

P.s. Результат снипета выводит на страничке всего 50 документов.
Думаю это поможет быстрее решить вопрос.

18 комментариев

avatar
Теоретическое предложение. Что весь затык в строках 5-11.
И в итоге преобразовалось всё в один запрос с COUNT, GROUP BY и JOIN(может и не нужен, не помню структуру MODX :-( Хотя нужен я бы в него затянул получение pagetitle и в итоге можно сразу на выход давать данные.)
avatar
Упрощу задачку изменения нужно внести всего в 1 строку:) притом не значительные.
Это по факту больше ребус. Так то понятно что нужно все переписать что б было по уму. там вообще просто можно было использовать Ditto для вывода а из за самописа получился косяк притом очень жесткий
avatar
$modx-> getChildIds ($id,1); ??
avatar
Агамс все верно:)
avatar
$id = isset($id) ? $id : 20;
$modx->runSnippet('DocLister', array(
	'idType' => 'parents',
	'depth' => 10,
	'parnts' => $id,
	'tvList' => 'tov_category',
	'saveDLObject' => '_DL'
));
$_DL = $modx->getPlaceholder('_DL');
$cat = array();
foreach($_DL->docsCollection() as $item){
	$cat[$item['id']] = empty($item['tv.tov_category']) ? 0 : 1;
}
ksort($cat);
foreach($cat as $key => $val){
	$cat_name = $_DL->docsCollection()->get($key);
	//Тут естественно свой шаблон и чего-то там selected
	$out = $cat_name['pagetitle'].' ('.$val.')<br />';
}
return $out;

А так еще меньше запросов. Угадайте что я сделал?)
avatar
Это ты совсем координально :)
avatar
В 3-й строке вместо — getChildids
поставить — getDocumentChildrenTVars

удалить 6-ю строку и немного переделать логику в 7-9 строке (исходя из того что возвращает getDocumentChildrenTVars)
avatar
В 6 строчке вместо * поставил value.
avatar
более вероятно '' (ничего)
avatar
Либо в третьей строчке добавил второй параметр — глубину поиска, указав 1.
Следственно не проверяется наличие потомков у выбранных документов.
avatar
Все верно :)
avatar
После измения стал такой:
Mem: 18,75 mb, MySQL: 0,0324 s, 178 request(s), PHP: 0,4197 s, total: 0,4520 s, document from database

178 запросов как-то не очень решение, по идее тут в 2-3 запроса можно уложиться.
avatar
не, там вся страничка 178:) так да должно быть меньше 100 запросов всего :)
avatar
Согласен про 2-3 запроса:
Запрос 1 — все дети (хотя если они в кэше, то получим и без запроса)
Запрос 2 — все значения tv tov_category через contentid IN(..id всех нужных детей..)
Запрос 3 — все ресурсы через id IN (… все id полученные из tov_category)
:)
avatar
Я если честно вообще уделяюсь как еще этот сайт работает на шаред хостинге.
Там таких ляпов банальных вагон

Средня скорость загрузки странички была порядка 8 секунд)
уже 1 секунда :) это всего то пару часов ловли багов.
А если еще переписать такие говнорешения то будет по людски работать
avatar
Дмитрий. В ModX хотя бы видны потуги людей научиться что-то делать руками. Через ж.., но как правило эти «ж» заметны в коде.
А вот когда берешь у кого-то переделать сайтик, сделанный к примеру на джумле, где вместо того, чтобы написать один select и пару строк парсинга результата в вывод, — устанавливается пара десятков компонентов неизвестного происхождения, делающих неизвестно что, вот тут наступает тихий ужас :)

Впрочем, встречал я и на modx «странные» сайты. Недавно переделывал сайт, где было сделано порядка 300 шаблонов страниц. Некоторые из них различались таким отличиями, как наличие/отсутствие заголовка h1 в выводе, или наличием-отсутствием превьюшки картинки. Хорошо хоть поименовали правильно — «шаблон вывода синей страницы новостей с картинкой» и «шаблон вывода синей страницы новостей без картинки» :)
avatar
Тада меня тоже это всегда удивляло. Я когда учился брал в работу только простые сайты если понимал что не вытяну то так и говорил клиенту в итогде в моих проектах минимум говнокода. А вот смотришь на некоторые проекты и кроме как переписать все с нуля желаний не возникает, и понимаешь что подставили клиента по самое немогу:(
avatar
Тема зашла, давай ещё )))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.