[ЛЮБОПЫТНО] Вопрос оптимизации
Привет, комрады, вопрос к опытным разработчикам. Есть страница, на ней много блоков которые показывают информацию из различных ресурсов, похоже на превью товаров в каталоге. Соответственно если нужно отобразить 2, 3 или больше таких превью я использую pdoResources, но как лучше сделать, с точки зрения оптимизации, если превью одна:
1. вызывать pdoResources
2. доставать каждое поле через fastfields или его аналог на Fenom
1. вызывать pdoResources
2. доставать каждое поле через fastfields или его аналог на Fenom
{$id | resource: 'pagetitle'}
Поблагодарить автора
Отправить деньги
Комментарии: 5
Привет! Ради эксперимента поставил debugParser
Вариант 1
skrinshoter.ru/s/111220/mspCPgvc?a —
Вариант 2
skrinshoter.ru/s/111220/bSRcK8bV?a
Короче, я бы вообще не заморачивался с этим, разница минимальная))
Вариант 1
{1 | resource : 'pagetitle'}
{1 | resource : 'catalog_img'}
skrinshoter.ru/s/111220/mspCPgvc?a —
Вариант 2
{'pdoResources' | snippet : [
'parents' => 0,
'resources' => 1,
'includeTVs' => 'catalog_img',
'tpl' => '@INLINE {$pagetitle} - {$_pls[\'tv.catalog_img\']}'
]}
skrinshoter.ru/s/111220/bSRcK8bV?a
Короче, я бы вообще не заморачивался с этим, разница минимальная))
Спасибо, что заморочился)))
Но я удивлен, почему-то думал что всё тащится в один запрос, а там 4-5
Вот тут точно один запрос будет)) Возвращает массив необходимых полей для одной превьюшки.
А в pdoField есть набор параметров, я не смотрел сам код сниппета, но, полагаю, что по ним есть дополнительные запросы в БД. Например, запрос текущего контекста, если явно не указан параметр context при вызове сниппета.
if(!$res_id) return;
$q = $modx->newQuery('modResource');
if($id_tv) {
$q->leftJoin('modTemplateVarResource', 'image', 'modResource.id = image.contentid AND image.tmplvarid = '.$id_tv);
}
$q->where([
'modResource.id' => $res_id
]);
$q->limit(1);
if($id_tv) {
$q->select('modResource.id, image.value as image, modResource.uri as uri, modResource.pagetitle as pagetitle');
} else {
$q->select('modResource.id, modResource.uri as uri, modResource.pagetitle as pagetitle');
}
$q->prepare();
$q->stmt->execute();
$result = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
return $result[0];
А в pdoField есть набор параметров, я не смотрел сам код сниппета, но, полагаю, что по ним есть дополнительные запросы в БД. Например, запрос текущего контекста, если явно не указан параметр context при вызове сниппета.
Понял, спасибо,
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.