Ага, на вложенных элементах процентовка шрифтов играла. Указал абсолютное значение.
В общих чертах верно. Но говорю же: разные цели - разные инструменты. У меня как правило все строится на выборках данных и все. А своя система процессоров позволяет менять логику централизованно. Если бы не было этой системы процессоров, то пришлось бы скорее всего использовать сами объекты, так как иногда нужна какая-то дополнительная логика, а она где-то должны храниться, чтобы всегда была на месте. Приведу пару небольших примеров. Вот довольно не маленький класс элемента (galItem - картинка) в компоненте Gallery. Что в нем есть?
Первый листинг выполняется в десятки раз быстрее, если я слишком примитивно сделал сравнения то поправьте, меня интересует производительность, скорость, гибкость, и т.д. и т.п.
провёл для себя эксперимент выявить каким способом быстрее достать данные, например достать id=185 и его tv параметр price0 привожу листинги кодов
$q1 = $modx->newQuery('modTemplateVarResource');
$q1->where(array('tmplvarid' => '19'));
$q1->select(array('modTemplateVarResource.*'));
$q1->limit(1000);
$q1->prepare();
$q1->stmt->execute();
$tvres = $q1->stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($tvres);
//-------resources------------
$q = $modx->newQuery('modResource');
$q->where(array(
'context_key' => 'web'
));
$q->select(array(
'modResource.*'
));
$q->limit(1000);
$q->prepare();
$q->stmt->execute();
$result = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$id = 185;//ресурс который ищем
foreach($result as $res){
if($res[id] == $id ){
foreach($tvres as $tv){
if($tv[contentid] == $id){
echo $res[pagetitle] . "\n";
echo $tv[value] . "\n";
}
}
}
}
$end_time = time() - 1272000000 + floatval(microtime()) - $begin_time;
echo $end_time; время потраченое 0.055360972881317 второй листинг 2) $begin_time = time() - 1272000000 + floatval(microtime());
$outHtmlAll='';
$modx->setLogLevel(3);
$namespace = 'shopmodx';
if(!$response = $modx->runProcessor('web/getdata',
array( "limit" => 1000
// Параметры
), array(
'processors_path' => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/',
))){
print "Не удалось выполнить процессор";
return;
}
$res0 = $response->getResponse();
//print_r($res0);
$id = 185;//ресурс который ищем
echo $res0[object][$id][pagetitle]. "\n";
echo $res0[object][$id][tvs][price0][value]. "\n";
$end_time = time() - 1272000000 + floatval(microtime()) - $begin_time;
echo $end_time . "\n"; время потраченое 0.47229799628258
По своему опыту могу сказать: стоит попробовать процессоры раз, и про сниппеты забудешь :)
Ваня уже в целом ответил. Да, главные минусы сниппетов (а getResources (здесь и далее подразумевается и getProducts, так как getProducts - это модифицированный getResources) - это сниппеты), что они возвращают только строковые результаты и что их нельзя расширять и т.п. Плюс к этому я бы еще добавил кое что:
да кстати замерил даную страницу http://developers.google.com/speed/pagespeed показывает Это время общее, включая пинг и т.п. А есть замеры на стороне самого сервера. Вот данные этой страницы: Memory: 13.0902 Mb TotalTime: 0.4274 s Но здесь хоть и не большая, но социальная сеть. Это один из крупнейших проектов, который приходилось делать (с учетом всех политик безопасностей, инфоблоков и т.п.). А средний корпоративный сайт или магазин вполне может работать быстрее. да наткнулся на сайты которые просто уговаривали кэшировать для того что бы сайт просто летал Берите на вооружение эту технологию :).
Я согласен, что появляются очень много зависимостей, и я уже с этим сталкнулся, так как одно изменение требует эти обновления и на других страницах. да наткнулся на сайты которые просто уговаривали кэшировать для того что бы сайт просто летал. Необходимо оптимизировать и переписать функционал всего сайта, что бы отказаться от кэширования, и по этому случаю, изучаю ваши разработки которые в основном не используют кэширование и хотелось бы иметь, неплохую документацию по вашим продуктам и в одном месте, да кстати замерил даную страницу http://developers.google.com/speed/pagespeed показывает По результатам тестирования время ответа вашего сервера составило 0,61 секунды Да и спасибо за быстрый отзыв на вопросы, и за комментарии и советы
Гибкость процессоров только в наследовании и том что он возвращает любой тип данных, а сниппет без танцев с бубнов всегда возвращает строку. А так по сути процессор это просто классы со стандартизированной в рамках MODX определенной логикой, в MODX их почему-то назвали именно так)